From 2777645205c55d3a37148103e679b167aff3bbec Mon Sep 17 00:00:00 2001 From: Nadja Reitzenstein Date: Mon, 14 Feb 2022 19:56:39 +0100 Subject: [PATCH] Make MQTT client try to reconnect on connection lost or disconnect --- src/actor.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/actor.rs b/src/actor.rs index ec29c36..8dcd5d6 100644 --- a/src/actor.rs +++ b/src/actor.rs @@ -129,7 +129,19 @@ impl Actuator for Dummy { pub fn load(log: &Logger, config: &Config) -> Result<(ActorMap, Vec)> { let mut map = HashMap::new(); - let mqtt = AsyncClient::new(config.mqtt_url.clone())?; + let mut mqtt = AsyncClient::new(config.mqtt_url.clone())?; + let dlog = log.clone(); + mqtt.set_disconnected_callback(move |c, prop, reason| { + error!(dlog, "got Disconnect({}) message from MQTT Broker: {:?}", reason, prop); + let tok = c.reconnect(); + smol::block_on(tok); + }); + let dlog = log.clone(); + mqtt.set_connection_lost_callback(move |c| { + error!(dlog, "lost connection to MQTT Broker!"); + let tok = c.reconnect(); + smol::block_on(tok); + }); let tok = mqtt.connect(paho_mqtt::ConnectOptions::new()); smol::block_on(tok)?;