@@ -4,6 +4,7 @@ use rmp_serde::to_vec_named;
44use rumqttc:: tokio_rustls:: rustls:: ClientConfig ;
55use rumqttc:: { Client , Event , MqttOptions , Packet , QoS , Transport } ;
66use serde:: Serialize ;
7+ use std:: sync:: { Arc , Mutex } ;
78use std:: { sync:: mpsc, thread, time:: Duration } ;
89use uuid:: Uuid ;
910
@@ -29,6 +30,7 @@ pub struct TetherAgent {
2930 pub ( crate ) client : Option < Client > ,
3031 message_sender : mpsc:: Sender < ( TetherOrCustomTopic , Vec < u8 > ) > ,
3132 message_receiver : mpsc:: Receiver < ( TetherOrCustomTopic , Vec < u8 > ) > ,
33+ is_connected : Arc < Mutex < bool > > ,
3234}
3335
3436#[ derive( Clone ) ]
@@ -148,6 +150,7 @@ impl TetherAgentOptionsBuilder {
148150 message_sender,
149151 message_receiver,
150152 mqtt_client_id : self . mqtt_client_id ,
153+ is_connected : Arc :: new ( Mutex :: new ( false ) ) ,
151154 } ;
152155
153156 if self . auto_connect {
@@ -283,19 +286,18 @@ impl TetherAgent {
283286
284287 let message_tx = self . message_sender . clone ( ) ;
285288
286- let ( connected_tx , connected_rx ) = mpsc :: channel ( ) ;
289+ let connection_state = Arc :: clone ( & self . is_connected ) ;
287290
288291 thread:: spawn ( move || {
289- let send_connected = connected_tx. clone ( ) ;
290292 for event in connection. iter ( ) {
291293 match event {
292294 Ok ( e) => match e {
293295 Event :: Incoming ( incoming) => match incoming {
294296 Packet :: ConnAck ( _) => {
295297 info ! ( "(Connected) ConnAck received!" ) ;
296- send_connected
297- . send ( true )
298- . expect ( "failed to push connected status form thread" ) ;
298+ let mut is_c =
299+ connection_state . lock ( ) . expect ( "failed to lock mutex" ) ;
300+ * is_c = true ;
299301 }
300302 Packet :: Publish ( p) => {
301303 debug ! ( "Incoming Publish packet (message received), {:?}" , & p) ;
@@ -334,11 +336,15 @@ impl TetherAgent {
334336 let mut is_ready = false ;
335337
336338 while !is_ready {
337- std:: thread:: sleep ( Duration :: from_millis ( 100 ) ) ;
339+ debug ! ( "Check whether connected..." ) ;
340+ std:: thread:: sleep ( Duration :: from_millis ( 1 ) ) ;
338341 trace ! ( "Is ready? {}" , is_ready) ;
339- if let Ok ( is_connected) = connected_rx. try_recv ( ) {
340- is_ready = is_connected;
341- trace ! ( "Is connected? {}" , is_connected) ;
342+ let get_state = * self . is_connected . lock ( ) . expect ( "failed to lock mutex" ) ;
343+ if get_state {
344+ info ! ( "Connection status confirmed" ) ;
345+ is_ready = true ;
346+ } else {
347+ debug ! ( "Not connected yet..." ) ;
342348 }
343349 }
344350
0 commit comments