From 0d2f0a49da823eebd1947dd0fb5986b8d3add8b5 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 --- Cargo.lock | 2 +- schema | 2 +- src/actor.rs | 14 +++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 42224f4..5416b8c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -504,7 +504,7 @@ dependencies = [ [[package]] name = "diflouroborane" -version = "0.2.1" +version = "0.2.3" dependencies = [ "async-channel", "async-trait", diff --git a/schema b/schema index c855646..18ed9c2 160000 --- a/schema +++ b/schema @@ -1 +1 @@ -Subproject commit c855646a90958ae575d58be074d187acb9f8f4fa +Subproject commit 18ed9c2ae6a221f57d19e255165c7ebc4508e9af 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)?;