diff options
| author | xengineering <me@xengineering.eu> | 2026-04-07 14:53:37 +0200 |
|---|---|---|
| committer | xengineering <me@xengineering.eu> | 2026-04-07 16:48:45 +0200 |
| commit | 129c825a77fb3cc039ab978785d72f92023ef1ab (patch) | |
| tree | 62bd0fee8cc9b6608e7f3ee091e49b69dcf00062 /lib | |
| parent | c2110a2098d475c5fa06d265833e229fad938e8d (diff) | |
| download | sia-app-129c825a77fb3cc039ab978785d72f92023ef1ab.tar sia-app-129c825a77fb3cc039ab978785d72f92023ef1ab.tar.zst sia-app-129c825a77fb3cc039ab978785d72f92023ef1ab.zip | |
Refactor message routing
This allows to route incoming MQTT messages in the _onMessage() method
and handle it in different handlers per topic.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/data.dart | 50 |
1 files 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<MqttReceivedMessage<MqttMessage>> messages) { for (final MqttReceivedMessage<MqttMessage> message in messages) { - final String topic = message.topic; + final List<String> 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 <prefix>/contacts/<address>/state - final List<String> 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(); } } |
