use tokio::sync::mpsc;
use super::broker::MqttBroker;
pub(super) enum BrokerEvent {
Message { topic: String, payload: String },
ConnectionLost,
Reconnected,
}
pub(super) async fn handle_broker_events(
mut event_rx: mpsc::UnboundedReceiver<BrokerEvent>,
broker: MqttBroker,
) {
while let Some(event) = event_rx.recv().await {
match event {
BrokerEvent::Reconnected => {
broker.set_connected(true);
tracing::info!("MQTT broker reconnected, restoring subscriptions");
broker.handle_reconnection().await;
}
BrokerEvent::ConnectionLost => {
let was_connected = broker.swap_connected(false);
if was_connected {
tracing::warn!("MQTT connection lost, waiting for reconnection");
broker.dispatch_disconnected_all().await;
}
}
BrokerEvent::Message { topic, payload } => {
tracing::debug!(
topic = %topic,
payload = %payload,
"MQTT message received"
);
broker.route_message(&topic, payload).await;
}
}
}
tracing::info!("MQTT broker event loop ended");
}