From 129c825a77fb3cc039ab978785d72f92023ef1ab Mon Sep 17 00:00:00 2001 From: xengineering Date: Tue, 7 Apr 2026 14:53:37 +0200 Subject: Refactor message routing This allows to route incoming MQTT messages in the _onMessage() method and handle it in different handlers per topic. --- lib/data.dart | 50 ++++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/lib/data.dart b/lib/data.dart index 4962a50..201550e 100644 --- a/lib/data.dart +++ b/lib/data.dart @@ -161,36 +161,38 @@ class AppState with ChangeNotifier { void _onMessage(List> messages) { for (final MqttReceivedMessage message in messages) { - final String topic = message.topic; + final List parts = message.topic.split('/'); + final String payload = MqttPublishPayload.bytesToStringAsString( + (message.payload as MqttPublishMessage).payload.message); - final MqttPublishMessage payloadMessage = - message.payload as MqttPublishMessage; - final String payload = - MqttPublishPayload.bytesToStringAsString(payloadMessage.payload.message); - - if (topic == '$topicPrefix/server/health') { - if (payload == 'good') { - process(MachineEvent.reachable); - } - - if (payload == 'bad') { - process(MachineEvent.unreachable); - } + if (message.topic == '$topicPrefix/server/health') { + _onHealthMessage(payload); + return; } - // format /contacts/
/state - final List parts = topic.split('/'); - if (parts.length != 4 || parts[1] != 'contact' || parts[3] != 'state') { - continue; + if (parts.length == 4 && parts[1] == 'contact' && parts[3] == 'state') { + String address = parts[2]; + _onContactMessage(payload, address); + return; } - final String address = parts[2]; + } + } - final bool? parsedState = _parseBool(payload); + void _onHealthMessage(String payload) { + switch (payload) { + case 'good': + process(MachineEvent.reachable); + case 'bad': + process(MachineEvent.unreachable); + } + } - if (parsedState != null) { - contacts[address] = parsedState; - notifyListeners(); - } + void _onContactMessage(String payload, String address) { + final bool? parsedState = _parseBool(payload); + + if (parsedState != null) { + contacts[address] = parsedState; + notifyListeners(); } } -- cgit v1.3