diff options
Diffstat (limited to 'lib/data.dart')
| -rw-r--r-- | lib/data.dart | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/data.dart b/lib/data.dart index 89d8760..415e61e 100644 --- a/lib/data.dart +++ b/lib/data.dart @@ -21,11 +21,14 @@ class AppState with ChangeNotifier { MachineState.init: <MachineEvent, MachineState> { MachineEvent.connect: MachineState.disconnected, }, + MachineState.disconnected: <MachineEvent, MachineState> { + MachineEvent.disconnect: MachineState.init, + }, }; MachineState state = MachineState.init; Map<String, bool> contacts = <String, bool>{}; - late final MqttServerClient _client; + late MqttServerClient _client; bool _brokerConnected = false; bool get brokerConnected => _brokerConnected; bool _serverConnected = false; @@ -54,6 +57,10 @@ class AppState with ChangeNotifier { _initMqtt(); } + if (nextState == MachineState.init) { + _deinitMqtt(); + } + state = nextState; notifyListeners(); } @@ -91,6 +98,10 @@ class AppState with ChangeNotifier { _client.updates?.listen(_onMessage); } + void _deinitMqtt() { + _client.disconnect(); + } + void _onConnected() { _client.subscribe('$topicPrefix/contact/+/state', MqttQos.exactlyOnce); _client.subscribe('$topicPrefix/server/health', MqttQos.exactlyOnce); |
