summaryrefslogtreecommitdiff
path: root/lib/data.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/data.dart')
-rw-r--r--lib/data.dart33
1 files changed, 18 insertions, 15 deletions
diff --git a/lib/data.dart b/lib/data.dart
index 53c3d01..89d8760 100644
--- a/lib/data.dart
+++ b/lib/data.dart
@@ -1,5 +1,3 @@
-import 'dart:async';
-
import 'package:flutter/foundation.dart';
import 'package:mqtt_client/mqtt_client.dart';
import 'package:mqtt_client/mqtt_server_client.dart';
@@ -23,9 +21,6 @@ class AppState with ChangeNotifier {
MachineState.init: <MachineEvent, MachineState> {
MachineEvent.connect: MachineState.disconnected,
},
- MachineState.disconnected: <MachineEvent, MachineState> {
- MachineEvent.disconnect: MachineState.init,
- },
};
MachineState state = MachineState.init;
@@ -36,22 +31,30 @@ class AppState with ChangeNotifier {
bool _serverConnected = false;
bool get serverConnected => _serverConnected;
- AppState() {
- _initMqtt();
- }
+ AppState();
void process(MachineEvent event) {
- Map<MachineEvent, MachineState>? ruleset = machine[state];
- if (ruleset == null) {
+ MachineState lastState = state;
+
+ Map<MachineEvent, MachineState>? transitions = machine[lastState];
+ if (transitions == null) {
return;
}
- MachineState? nextMachineState = ruleset[event];
- if (nextMachineState == null) {
+ MachineState? nextState = transitions[event];
+ if (nextState == null) {
return;
}
- state = nextMachineState;
+ if (nextState == lastState) {
+ return;
+ }
+
+ if (lastState == MachineState.init) {
+ _initMqtt();
+ }
+
+ state = nextState;
notifyListeners();
}
@@ -61,7 +64,7 @@ class AppState with ChangeNotifier {
super.dispose();
}
- Future<void> _initMqtt() async {
+ void _initMqtt() {
_client = MqttServerClient(
brokerHostname,
'sia_app_${DateTime.now().millisecondsSinceEpoch}',
@@ -79,7 +82,7 @@ class AppState with ChangeNotifier {
_client.onAutoReconnected = _onAutoReconnected;
try {
- await _client.connect();
+ _client.connect();
} catch (e) {
_client.disconnect();
return;