Compare commits
	
		
			2 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 49e8adf2eb | |||
| f51a08fb50 | 
							
								
								
									
										2
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -246,7 +246,7 @@ dependencies = [ | |||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "mqtt-client" | name = "mqtt-client" | ||||||
| version = "3.0.0" | version = "4.0.0" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "crossbeam", |  "crossbeam", | ||||||
|  "rumqttc", |  "rumqttc", | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| [package] | [package] | ||||||
| name = "mqtt-client" | name = "mqtt-client" | ||||||
| version = "3.0.0" | version = "4.0.0" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| 
 | 
 | ||||||
| [dependencies] | [dependencies] | ||||||
|  | |||||||
							
								
								
									
										31
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								src/lib.rs
									
									
									
									
									
								
							| @ -3,15 +3,16 @@ pub mod mqtt_client { | |||||||
|     use std::time::Duration; |     use std::time::Duration; | ||||||
|     use std::thread; |     use std::thread; | ||||||
| 
 | 
 | ||||||
|     use rumqttc::{Client, Connection, Event, MqttOptions, Outgoing, Packet}; |     use rumqttc::{Connection, Event, MqttOptions, Outgoing, Packet}; | ||||||
|     use crossbeam::channel::unbounded; |     use crossbeam::channel::unbounded; | ||||||
|     
 |     
 | ||||||
|  |     pub use rumqttc::Client; | ||||||
|     pub use crossbeam::channel::{Receiver, Sender}; |     pub use crossbeam::channel::{Receiver, Sender}; | ||||||
|     pub use rumqttc::QoS; |     pub use rumqttc::QoS; | ||||||
| 
 | 
 | ||||||
|     pub trait MqttTool<S: std::marker::Send> { |     pub trait MqttTool<S: std::marker::Send> { | ||||||
|         fn new(client: Client, tx: Sender<MqttMessage>, config: S) -> Self; |         fn new(tx: Sender<MqttMessage>, config: S, client: Client) -> Self; | ||||||
|         fn run(&mut self, rx: Receiver<MqttMessage>); |         fn run(&mut self, event_recever: Receiver<MqttEvent>); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub struct MqttMessage { |     pub struct MqttMessage { | ||||||
| @ -21,9 +22,15 @@ pub mod mqtt_client { | |||||||
|         pub qos: QoS, |         pub qos: QoS, | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub enum MqttEvent { | ||||||
|  |         Connected, | ||||||
|  |         Disconnected, | ||||||
|  |         Message(MqttMessage) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn run<S: std::marker::Send, T: MqttTool<S>>(host: String, port: u16, client: String, user: String, pass: String, config: S) where S: 'static { |     pub fn run<S: std::marker::Send, T: MqttTool<S>>(host: String, port: u16, client: String, user: String, pass: String, config: S) where S: 'static { | ||||||
|         let (tx_sender, tx_recever) = unbounded::<MqttMessage>(); |         let (tx_sender, tx_recever) = unbounded::<MqttMessage>(); | ||||||
|         let (rx_sender, rx_recever) = unbounded::<MqttMessage>(); |         let (event_sender, event_recever) = unbounded::<MqttEvent>(); | ||||||
| 
 | 
 | ||||||
|         println!("INFO : mqtt client: run"); |         println!("INFO : mqtt client: run"); | ||||||
| 
 | 
 | ||||||
| @ -49,7 +56,7 @@ pub mod mqtt_client { | |||||||
|         let mqtt = thread::Builder::new() |         let mqtt = thread::Builder::new() | ||||||
|             .name("mqtt".to_string()) |             .name("mqtt".to_string()) | ||||||
|             .spawn(move || { |             .spawn(move || { | ||||||
|                 handeler::<S, T>(connection, rx_sender); |                 handeler::<S, T>(connection, event_sender); | ||||||
|             }); |             }); | ||||||
|         match mqtt { |         match mqtt { | ||||||
|             Err(_n) => println!("ERROR: mqtt client: failed to create mqtt thread"), |             Err(_n) => println!("ERROR: mqtt client: failed to create mqtt thread"), | ||||||
| @ -60,9 +67,8 @@ pub mod mqtt_client { | |||||||
|         let tool_runner = thread::Builder::new() |         let tool_runner = thread::Builder::new() | ||||||
|             .name("tool runner".to_string()) |             .name("tool runner".to_string()) | ||||||
|             .spawn(move || { |             .spawn(move || { | ||||||
|                 let mut tool = T::new(client, tx_sender, config); |                 let mut tool = T::new(tx_sender, config, client); | ||||||
|                 tool.run(rx_recever); |                 tool.run(event_recever); | ||||||
|                 println!("WARN : rool_runner: tool has ended"); |  | ||||||
|             }); |             }); | ||||||
|         match tool_runner { |         match tool_runner { | ||||||
|             Err(_n) => println!("ERROR: mqtt client: failed to create publisher thread"), |             Err(_n) => println!("ERROR: mqtt client: failed to create publisher thread"), | ||||||
| @ -94,7 +100,7 @@ pub mod mqtt_client { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub(self) fn handeler<S: std::marker::Send,T: MqttTool<S>>(mut connection: Connection, rx: Sender<MqttMessage>) { |     pub(self) fn handeler<S: std::marker::Send,T: MqttTool<S>>(mut connection: Connection, rx: Sender<MqttEvent>) { | ||||||
|         for (_i, notification) in connection.iter().enumerate() { |         for (_i, notification) in connection.iter().enumerate() { | ||||||
|             let mut delay: bool = false; |             let mut delay: bool = false; | ||||||
|             match notification { |             match notification { | ||||||
| @ -145,7 +151,10 @@ pub mod mqtt_client { | |||||||
|                         }, |                         }, | ||||||
|                         Event::Incoming(n) => match n { |                         Event::Incoming(n) => match n { | ||||||
|                             Packet::Connect(_) => println!("INFO : mqtt: connected"), |                             Packet::Connect(_) => println!("INFO : mqtt: connected"), | ||||||
|                             Packet::ConnAck(_) => println!("INFO : mqtt: connaction acknolaged"), |                             Packet::ConnAck(_) => { | ||||||
|  |                                 println!("INFO : mqtt: connaction acknolaged"); | ||||||
|  |                                 let _ = rx.send(MqttEvent::Connected); | ||||||
|  |                             }, | ||||||
|                             Packet::Publish(msg) => { |                             Packet::Publish(msg) => { | ||||||
|                                 let mut payload: String = String::from(""); |                                 let mut payload: String = String::from(""); | ||||||
|                                 match String::from_utf8(msg.payload.to_vec()) { |                                 match String::from_utf8(msg.payload.to_vec()) { | ||||||
| @ -160,7 +169,7 @@ pub mod mqtt_client { | |||||||
|                                         qos: msg.qos, |                                         qos: msg.qos, | ||||||
|                                     }; |                                     }; | ||||||
|                     
 |                     
 | ||||||
|                                     match rx.send(message) { |                                     match rx.send(MqttEvent::Message(message)) { | ||||||
|                                         Err(n) => println!("ERROR: faild to send incomming message to tool ({:?})", n), |                                         Err(n) => println!("ERROR: faild to send incomming message to tool ({:?})", n), | ||||||
|                                         Ok(_n) => {} |                                         Ok(_n) => {} | ||||||
|                                     } |                                     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user