Split remaining mqtt stuff into sprinklers_mqtt
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		
							parent
							
								
									eff5e0c703
								
							
						
					
					
						commit
						6e596a2ef3
					
				| @ -4,5 +4,6 @@ members = [ | |||||||
|     "sprinklers_core", |     "sprinklers_core", | ||||||
|     "sprinklers_database", |     "sprinklers_database", | ||||||
|     "sprinklers_actors", |     "sprinklers_actors", | ||||||
|  |     "sprinklers_mqtt", | ||||||
|     "sprinklers_rs" |     "sprinklers_rs" | ||||||
| ] | ] | ||||||
							
								
								
									
										27
									
								
								sprinklers_mqtt/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								sprinklers_mqtt/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | [package] | ||||||
|  | name = "sprinklers_mqtt" | ||||||
|  | version = "0.1.0" | ||||||
|  | authors = ["Alex Mikhalev <alexmikhalevalex@gmail.com>"] | ||||||
|  | edition = "2018" | ||||||
|  | 
 | ||||||
|  | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||||||
|  | 
 | ||||||
|  | [dependencies] | ||||||
|  | sprinklers_core = { path = "../sprinklers_core" } | ||||||
|  | sprinklers_actors = { path = "../sprinklers_actors" } | ||||||
|  | 
 | ||||||
|  | actix = { version = "0.10.0", default-features = false } | ||||||
|  | eyre = "0.6.0" | ||||||
|  | rumqttc = "0.1.0" | ||||||
|  | tracing = "0.1.19" | ||||||
|  | serde = { version = "1.0.116", features = ["derive"] } | ||||||
|  | serde_json = "1.0.57" | ||||||
|  | chrono = "0.4.15" | ||||||
|  | num-traits = "0.2.12" | ||||||
|  | num-derive = "0.3.2" | ||||||
|  | futures-util = { version = "0.3.5", default-features = false, features = ["std", "async-await", "sink"] } | ||||||
|  | 
 | ||||||
|  | [dependencies.tokio] | ||||||
|  | version = "0.2.22" | ||||||
|  | default-features = false | ||||||
|  | features = [] | ||||||
| @ -63,13 +63,13 @@ impl MqttInterface { | |||||||
|         Ok(()) |         Ok(()) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub(super) async fn publish_connected(&mut self, connected: bool) -> eyre::Result<()> { |     async fn publish_connected(&mut self, connected: bool) -> eyre::Result<()> { | ||||||
|         self.publish_data(self.topics.connected(), &connected) |         self.publish_data(self.topics.connected(), &connected) | ||||||
|             .await |             .await | ||||||
|             .wrap_err("failed to publish connected topic") |             .wrap_err("failed to publish connected topic") | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub(super) async fn cancel(&mut self) -> Result<(), rumqttc::ClientError> { |     async fn cancel(&mut self) -> Result<(), rumqttc::ClientError> { | ||||||
|         self.client.cancel().await |         self.client.cancel().await | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -135,7 +135,7 @@ impl MqttInterface { | |||||||
|             .wrap_err("failed to publish section runner") |             .wrap_err("failed to publish section runner") | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub async fn publish_response(&mut self, resp: request::ResponseWithId) -> eyre::Result<()> { |     async fn publish_response(&mut self, resp: request::ResponseWithId) -> eyre::Result<()> { | ||||||
|         let payload_vec = |         let payload_vec = | ||||||
|             serde_json::to_vec(&resp).wrap_err("failed to serialize request response")?; |             serde_json::to_vec(&resp).wrap_err("failed to serialize request response")?; | ||||||
|         // TODO: if couldn't serialize, just in case can have a static response
 |         // TODO: if couldn't serialize, just in case can have a static response
 | ||||||
| @ -146,7 +146,7 @@ impl MqttInterface { | |||||||
|         Ok(()) |         Ok(()) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub async fn subscribe_requests(&mut self) -> eyre::Result<()> { |     async fn subscribe_requests(&mut self) -> eyre::Result<()> { | ||||||
|         self.client |         self.client | ||||||
|             .subscribe(self.topics.requests(), QoS::ExactlyOnce) |             .subscribe(self.topics.requests(), QoS::ExactlyOnce) | ||||||
|             .await?; |             .await?; | ||||||
| @ -1,8 +1,7 @@ | |||||||
| use sprinklers_actors::{program_runner::ProgramRunner, section_runner::SectionRunner}; | use sprinklers_actors::{program_runner::ProgramRunner, section_runner::SectionRunner}; | ||||||
| use sprinklers_core::model::Sections; | use sprinklers_core::model::Sections; | ||||||
| 
 | 
 | ||||||
| use futures_util::ready; | use futures_util::{ready, FutureExt}; | ||||||
| use futures_util::FutureExt; |  | ||||||
| use num_derive::FromPrimitive; | use num_derive::FromPrimitive; | ||||||
| use serde::{Deserialize, Serialize}; | use serde::{Deserialize, Serialize}; | ||||||
| use std::{fmt, future::Future, pin::Pin, task::Poll}; | use std::{fmt, future::Future, pin::Pin, task::Poll}; | ||||||
| @ -1,4 +1,4 @@ | |||||||
| use crate::mqtt::MqttInterface; | use super::MqttInterface; | ||||||
| use sprinklers_actors::{ | use sprinklers_actors::{ | ||||||
|     program_runner::{ProgramEvent, ProgramEventRecv}, |     program_runner::{ProgramEvent, ProgramEventRecv}, | ||||||
|     section_runner::{SecRunnerState, SecRunnerStateRecv, SectionEvent, SectionEventRecv}, |     section_runner::{SecRunnerState, SecRunnerStateRecv, SectionEvent, SectionEventRecv}, | ||||||
| @ -10,27 +10,14 @@ edition = "2018" | |||||||
| sprinklers_core = { path = "../sprinklers_core" } | sprinklers_core = { path = "../sprinklers_core" } | ||||||
| sprinklers_database = { path = "../sprinklers_database" } | sprinklers_database = { path = "../sprinklers_database" } | ||||||
| sprinklers_actors = { path = "../sprinklers_actors" } | sprinklers_actors = { path = "../sprinklers_actors" } | ||||||
|  | sprinklers_mqtt = { path = "../sprinklers_mqtt" } | ||||||
| 
 | 
 | ||||||
| color-eyre = "0.5.1" | color-eyre = "0.5.1" | ||||||
| eyre = "0.6.0" | eyre = "0.6.0" | ||||||
| thiserror = "1.0.20" | tokio = "0.2.22" | ||||||
| tokio = { version = "0.2.22", features = ["rt-core", "time", "stream", "sync", "signal", "macros", "test-util"] } |  | ||||||
| tracing = { version = "0.1.19", features = ["log"] } | tracing = { version = "0.1.19", features = ["log"] } | ||||||
| tracing-futures = "0.2.4" |  | ||||||
| pin-project = "0.4.23" |  | ||||||
| im = "15.0.0" |  | ||||||
| chrono = { version = "0.4.15" } |  | ||||||
| assert_matches = "1.3.0" |  | ||||||
| serde = { version = "1.0.116", features = ["derive"] } |  | ||||||
| serde_json = "1.0.57" |  | ||||||
| actix = { version = "0.10.0", default-features = false } | actix = { version = "0.10.0", default-features = false } | ||||||
| actix-rt = "1.1.1" | actix-rt = "1.1.1" | ||||||
| futures-util = { version = "0.3.5", default-features = false, features = ["std", "async-await", "sink"] } |  | ||||||
| num-traits = "0.2.12" |  | ||||||
| num-derive = "0.3.2" |  | ||||||
| 
 |  | ||||||
| [dependencies.rumqttc] |  | ||||||
| version = "0.1.0" |  | ||||||
| 
 | 
 | ||||||
| [dependencies.tracing-subscriber] | [dependencies.tracing-subscriber] | ||||||
| version = "0.2.11" | version = "0.2.11" | ||||||
|  | |||||||
| @ -1,13 +1,12 @@ | |||||||
| #![warn(clippy::all)] | #![warn(clippy::all)] | ||||||
| #![warn(clippy::print_stdout)] | #![warn(clippy::print_stdout)] | ||||||
| 
 | 
 | ||||||
| mod mqtt; | // mod option_future;
 | ||||||
| mod option_future; |  | ||||||
| 
 | 
 | ||||||
| use sprinklers_core::section_interface::MockSectionInterface; | use sprinklers_core::section_interface::MockSectionInterface; | ||||||
| use sprinklers_database as database; | use sprinklers_database as database; | ||||||
| use sprinklers_actors as actors; | use sprinklers_actors as actors; | ||||||
| use mqtt::UpdateListener; | use sprinklers_mqtt as mqtt; | ||||||
| 
 | 
 | ||||||
| use eyre::Result; | use eyre::Result; | ||||||
| use std::sync::Arc; | use std::sync::Arc; | ||||||
| @ -61,7 +60,7 @@ async fn main() -> Result<()> { | |||||||
|         let section_events = section_runner.subscribe().await?; |         let section_events = section_runner.subscribe().await?; | ||||||
|         let program_events = program_runner.subscribe().await?; |         let program_events = program_runner.subscribe().await?; | ||||||
|         let sec_runner_state = section_runner.state_receiver(); |         let sec_runner_state = section_runner.state_receiver(); | ||||||
|         UpdateListener::start( |         mqtt::UpdateListener::start( | ||||||
|             section_events, |             section_events, | ||||||
|             program_events, |             program_events, | ||||||
|             sec_runner_state, |             sec_runner_state, | ||||||
| @ -70,6 +69,7 @@ async fn main() -> Result<()> { | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     program_runner.update_sections(sections.clone()).await?; |     program_runner.update_sections(sections.clone()).await?; | ||||||
|  |     // TODO: update listener should probably do this
 | ||||||
|     mqtt_interface.publish_sections(§ions).await?; |     mqtt_interface.publish_sections(§ions).await?; | ||||||
|     for section_id in sections.keys() { |     for section_id in sections.keys() { | ||||||
|         mqtt_interface |         mqtt_interface | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user