diff --git a/src-tauri/src/mqtt.rs b/src-tauri/src/mqtt.rs index f6aa620..117ae49 100644 --- a/src-tauri/src/mqtt.rs +++ b/src-tauri/src/mqtt.rs @@ -281,13 +281,18 @@ pub fn run_loop(e: EventLoop, ct: CancellationToken) -> tokio::task::JoinHandle< } async fn run_loop_inner(mut e: EventLoop, ct: CancellationToken) { + let mut was_disconnected = false; let mut retry_strategy = generate_default_backoff(); loop { select! { e = e.poll() => { if e.is_ok() { - retry_strategy = generate_default_backoff(); + if was_disconnected { + info!("MQTT reconnected!"); + retry_strategy = generate_default_backoff(); + was_disconnected = false; + } continue; } @@ -300,8 +305,9 @@ async fn run_loop_inner(mut e: EventLoop, ct: CancellationToken) { e => error!("MQTT connection error occurred - {e:?}") } + was_disconnected = true; let sleep_time = retry_strategy.next().unwrap(); - error!("Waiting for {} to retry poll", sleep_time.as_secs()); + error!("Waiting for {} secs to retry poll", sleep_time.as_secs()); tokio::time::sleep(sleep_time).await; } _ = ct.cancelled() => { @@ -313,5 +319,5 @@ async fn run_loop_inner(mut e: EventLoop, ct: CancellationToken) { } fn generate_default_backoff() -> ExponentialFactorBackoff { - ExponentialFactorBackoff::from_millis(5_000, 1.5).max_delay(Duration::from_secs(60)) + ExponentialFactorBackoff::from_millis(5_000, 2.0).max_delay(Duration::from_secs(60)) }