From 49e8adf2eb768fcd147f0d6508a2f32eed86a641 Mon Sep 17 00:00:00 2001 From: LailaTheElf Date: Mon, 5 May 2025 14:54:54 +0200 Subject: [PATCH] allow initialisation when reconnected --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/lib.rs | 28 ++++++++++++++++++---------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index df71fad..bdf2630 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -246,7 +246,7 @@ dependencies = [ [[package]] name = "mqtt-client" -version = "3.0.1" +version = "4.0.0" dependencies = [ "crossbeam", "rumqttc", diff --git a/Cargo.toml b/Cargo.toml index e53fe26..aa2f349 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mqtt-client" -version = "3.0.1" +version = "4.0.0" edition = "2021" [dependencies] diff --git a/src/lib.rs b/src/lib.rs index d81bc33..77a835e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,8 +11,8 @@ pub mod mqtt_client { pub use rumqttc::QoS; pub trait MqttTool { - fn new(client: Client, tx: Sender, config: S) -> Self; - fn run(&mut self, rx: Receiver); + fn new(tx: Sender, config: S, client: Client) -> Self; + fn run(&mut self, event_recever: Receiver); } pub struct MqttMessage { @@ -22,9 +22,15 @@ pub mod mqtt_client { pub qos: QoS, } + pub enum MqttEvent { + Connected, + Disconnected, + Message(MqttMessage) + } + pub fn run>(host: String, port: u16, client: String, user: String, pass: String, config: S) where S: 'static { let (tx_sender, tx_recever) = unbounded::(); - let (rx_sender, rx_recever) = unbounded::(); + let (event_sender, event_recever) = unbounded::(); println!("INFO : mqtt client: run"); @@ -50,7 +56,7 @@ pub mod mqtt_client { let mqtt = thread::Builder::new() .name("mqtt".to_string()) .spawn(move || { - handeler::(connection, rx_sender); + handeler::(connection, event_sender); }); match mqtt { Err(_n) => println!("ERROR: mqtt client: failed to create mqtt thread"), @@ -61,9 +67,8 @@ pub mod mqtt_client { let tool_runner = thread::Builder::new() .name("tool runner".to_string()) .spawn(move || { - let mut tool = T::new(client, tx_sender, config); - tool.run(rx_recever); - println!("WARN : rool_runner: tool has ended"); + let mut tool = T::new(tx_sender, config, client); + tool.run(event_recever); }); match tool_runner { Err(_n) => println!("ERROR: mqtt client: failed to create publisher thread"), @@ -95,7 +100,7 @@ pub mod mqtt_client { } } - pub(self) fn handeler>(mut connection: Connection, rx: Sender) { + pub(self) fn handeler>(mut connection: Connection, rx: Sender) { for (_i, notification) in connection.iter().enumerate() { let mut delay: bool = false; match notification { @@ -146,7 +151,10 @@ pub mod mqtt_client { }, Event::Incoming(n) => match n { 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) => { let mut payload: String = String::from(""); match String::from_utf8(msg.payload.to_vec()) { @@ -161,7 +169,7 @@ pub mod mqtt_client { 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), Ok(_n) => {} }