Fehlerkorrekturen

This commit is contained in:
Sven committed 2024-05-06 11:33:51 +02:00
1 parent beb4ef5cb7
commit 8c45d1052e
1 file changed
+90 -80
+90 -80
View File
@@ -39,6 +39,7 @@ import 'package:stadtbote/tools/messages/ranking_updated.dart';
import 'package:stadtbote/tools/messages/request_connection_status_message.dart';
import 'package:stadtbote/tools/messages/session_info_update.dart';
import 'package:stadtbote/tools/messages/status_info_update.dart';
// ignore: depend_on_referenced_packages
import 'package:typed_data/typed_buffers.dart';
import 'package:uuid/uuid.dart';
@@ -48,10 +49,7 @@ import '../model/session_status.dart';
import 'constants.dart';
import 'util.dart';
enum ConnectionStateEnum {
notConnected,
connected
}
enum ConnectionStateEnum { notConnected, connected }
class MqttCore {
late ConnectionStateEnum connectionState = ConnectionStateEnum.notConnected;
@@ -109,9 +107,7 @@ class MqttCore {
_mqttClient!.onDisconnected = _clientDisconnected;
_mqttClient!.onAutoReconnect = _clientDisconnected;
_mqttClient!.onAutoReconnected = _clientConnected;
_mqttClient!.connectionMessage = MqttConnectMessage()
.withClientIdentifier(await Util.getAppUuid())
.authenticateAs("app", "apppwd");
_mqttClient!.connectionMessage = MqttConnectMessage().withClientIdentifier(await Util.getAppUuid()).authenticateAs("app", "apppwd");
await _mqttClient!.connect();
@@ -126,13 +122,14 @@ class MqttCore {
} else {
Util.logInfo('Verbindung zum MQTT-Broker fehlgeschlagen!');
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected));
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged,
arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected));
}
} catch (ex) {
Util.logInfo('Verbindung zum MQTT-Broker fehlgeschlagen!: $ex');
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected));
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged,
arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected));
}
}
@@ -149,17 +146,15 @@ class MqttCore {
}
}
publishText(String topic, String text) {
if (_mqttClient != null) {
var buffer = Uint8Buffer();
buffer.addAll(utf8.encode(text));
_publishText(String topic, String text) {
var buffer = Uint8Buffer();
buffer.addAll(GZipEncoder().encode(const Utf8Encoder().convert(text)) as Iterable<int>);
_mqttClient!.publishMessage(topic, MqttQos.exactlyOnce, buffer);
var messageTopic = "$_toServerTopic$topic/$_clientId";
Util.logInfo("message\n$text\nsend to $topic");
} else {
Util.logException("publishBinary called while offline!");
}
_mqttClient!.publishMessage(messageTopic, MqttQos.exactlyOnce, buffer);
Util.logInfo("message\n$text\nsend to $messageTopic");
}
publishPayloadMessage(String topic, Map<String, dynamic> payload) {
@@ -172,7 +167,7 @@ class MqttCore {
var json = jsonEncode(payloadContainer.toJson());
try {
publishText(_toServerTopic, json);
_publishText(_toServerTopic, json);
} catch (e) {
_enqueueMessage(_toServerTopic, jsonEncode(payloadContainer.toJson()));
}
@@ -187,57 +182,58 @@ class MqttCore {
final MqttPublishMessage message = mqttMessage.payload as MqttPublishMessage;
if (message.variableHeader!.topicName.endsWith(_clientId)) {
var messageBytes = message.payload.message;
String payload = utf8.decode(GZipDecoder().decodeBytes(messageBytes));
var messageBytes = message.payload.message;
String payload = utf8.decode(GZipDecoder().decodeBytes(messageBytes));
var topicArray = message.variableHeader?.topicName;
var topicArraySplited = topicArray!.split("/");
var topic = topicArraySplited[3];
var topicArray = message.variableHeader?.topicName;
var topicArraySplited = topicArray!.split("/");
var topic = topicArraySplited[3];
Util.logInfo('message received\ntopic: $topic\nmessage: $payload');
Util.logInfo('message received\ntopic: $topic\nmessage: $payload');
switch (topic) {
case 'session':
_sessionMessageReceived(jsonDecode(payload));
break;
switch (topic) {
case 'session':
_sessionMessageReceived(jsonDecode(payload));
break;
case 'status':
_statusMessageReceived(jsonDecode(payload));
break;
case 'status':
_statusMessageReceived(jsonDecode(payload));
break;
case 'ranks':
_rankingMessageReceived(jsonDecode(payload));
break;
case 'ranks':
_rankingMessageReceived(jsonDecode(payload));
break;
case 'job':
_jobMessageReceived(jsonDecode(payload));
break;
case 'job':
_jobMessageReceived(jsonDecode(payload));
break;
case 'job_del':
_jobDeleteReceived(jsonDecode(payload));
break;
case 'job_del':
_jobDeleteReceived(jsonDecode(payload));
break;
case 'sync_request':
_syncRequestReceived(jsonDecode(payload));
break;
case 'sync_request':
_syncRequestReceived(jsonDecode(payload));
break;
case "mssg":
_messageMessageReceived(jsonDecode(payload));
break;
case "mssg":
_messageMessageReceived(jsonDecode(payload));
break;
case "upload_device_log":
_messageUploadDeviceLogReceived(jsonDecode(payload));
break;
case "upload_device_log":
_messageUploadDeviceLogReceived(jsonDecode(payload));
break;
default:
Util.logInfo('Unknown topic: $topic');
break;
default:
Util.logInfo('Unknown topic: $topic');
break;
}
}
}
} catch(ex) {
} catch (ex) {
Util.logException(ex.toString());
}
}});
}
});
if (await Util.preferencesContainsKey(Constants.prefsPreviousMqttSubscription)) {
String previousMqttSubscription = await Util.preferencesGetString(Constants.prefsPreviousMqttSubscription, "") as String;
@@ -253,9 +249,11 @@ class MqttCore {
_mqttClient!.subscribe(_fromServerTopic, MqttQos.exactlyOnce);
Util.preferencesSaveString(Constants.prefsPreviousMqttSubscription, _fromServerTopic);
Util.logInfo('subscribed to topic: $_fromServerTopic');
var fromServerTopic = "$_fromServerTopic#";
Util.logInfo('subscribed to topic: $fromServerTopic');
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.connected));
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged,
arguments: ConnectionStatus(status: ConnectionStatusEnum.connected));
}
void _sessionMessageReceived(payloadData) async {
@@ -272,20 +270,22 @@ class MqttCore {
await MyApp.isarInstance.sessionStatus.put(sessionStatusMessage);
});
MessageService().publish<SessionStatusInfoUpdate>(Constants.messageTopicSessionStatusInfoUpdate, arguments: SessionStatusInfoUpdate(status: sessionStatusMessage));
MessageService().publish<SessionStatusInfoUpdate>(Constants.messageTopicSessionStatusInfoUpdate,
arguments: SessionStatusInfoUpdate(status: sessionStatusMessage));
_startTrackTimer();
}
void _statusMessageReceived(payloadData) async {
var statusMessage = Status.fromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.status.clear();
await MyApp.isarInstance.status.put(statusMessage);
});
void _statusMessageReceived(payloadData) async {
var statusMessage = Status.fromJson(payloadData);
MessageService().publish<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdated, arguments: StatusInfoUpdate(status: statusMessage));
}
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.status.clear();
await MyApp.isarInstance.status.put(statusMessage);
});
MessageService().publish<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdated, arguments: StatusInfoUpdate(status: statusMessage));
}
void _locationStatusMessageReceived(payloadData) async {
var locationStatus = LocationStatus.fromJson(payloadData);
@@ -295,7 +295,8 @@ class MqttCore {
await MyApp.isarInstance.locationStatus.put(locationStatus);
});
MessageService().publish<LocationStatusUpdate>(Constants.messageTopicLocationStatusUpdated, arguments: LocationStatusUpdate(status: locationStatus));
MessageService()
.publish<LocationStatusUpdate>(Constants.messageTopicLocationStatusUpdated, arguments: LocationStatusUpdate(status: locationStatus));
}
void _rankingMessageReceived(payloadData) async {
@@ -334,7 +335,7 @@ class MqttCore {
}
void _jobDeleteReceived(payloadData) async {
for(var jobId in payloadData) {
for (var jobId in payloadData) {
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.jobs.delete(jobId);
});
@@ -364,7 +365,11 @@ class MqttCore {
void _messageUploadDeviceLogReceived(payloadData) async {
var deviceLogRequest = DeviceLogRequest.fromJson(payloadData);
var logEintries = await MyApp.isarInstance.logEntrys.filter().timeGreaterThan(deviceLogRequest.startDateTime).timeLessThan(deviceLogRequest.endDateTime).findAll();
var logEintries = await MyApp.isarInstance.logEntrys
.filter()
.timeGreaterThan(deviceLogRequest.startDateTime)
.timeLessThan(deviceLogRequest.endDateTime)
.findAll();
var deviceLog = DeviceLogResponse();
deviceLog.entries = logEintries;
@@ -404,7 +409,8 @@ class MqttCore {
_startTrackTimer();
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected));
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged,
arguments: ConnectionStatus(status: ConnectionStatusEnum.notConnected));
}
void _clientConnected() {
@@ -414,7 +420,8 @@ class MqttCore {
_initSession();
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.connected));
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged,
arguments: ConnectionStatus(status: ConnectionStatusEnum.connected));
}
void _processBootstrap() async {
@@ -443,6 +450,7 @@ class MqttCore {
var response = await http.get(Uri.parse(uri));
var responseText = response.body;
Util.logInfo("Bootstrap response: $responseText");
var bootstrapResponsePayload = BootstrapResponse.fromJson(jsonDecode(responseText));
@@ -465,11 +473,10 @@ class MqttCore {
var startSessionMessage = StartSessionMessage();
var jsonMap = startSessionMessage.toJson();
var json = jsonEncode(jsonMap);
publishText("session", json);
_publishText("session", json);
}
_sendSyncMessage() async
{
_sendSyncMessage() async {
var jobs = await MyApp.isarInstance.jobs.filter().stateGreaterThan(-1).findAll();
var answer = SyncJobsMessage();
@@ -525,7 +532,7 @@ class MqttCore {
if (enqueuedMessages.isNotEmpty) {
for (var enqueuedMessage in enqueuedMessages) {
try {
publishText(enqueuedMessage.topic, enqueuedMessage.payload);
_publishText(enqueuedMessage.topic, enqueuedMessage.payload);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.enqueuedMessages.delete(enqueuedMessage.id);
@@ -553,7 +560,8 @@ class MqttCore {
publishPayloadMessage(payloadMessage.topic, payloadMessage.message);
});
MessageService().subscribe<DisconnectClientMessage>(Constants.messageTopicDisconnectClient, this, (DisconnectClientMessage disconnectClientMessage) {
MessageService().subscribe<DisconnectClientMessage>(Constants.messageTopicDisconnectClient, this,
(DisconnectClientMessage disconnectClientMessage) {
_disconnect();
});
@@ -561,7 +569,8 @@ class MqttCore {
_connectToBroker();
});
MessageService().subscribe<RequestConnectionStatusMessage>(Constants.messageTopicRequestConnectionStatus, this, (RequestConnectionStatusMessage requestConnectionStatusMessage) {
MessageService().subscribe<RequestConnectionStatusMessage>(Constants.messageTopicRequestConnectionStatus, this,
(RequestConnectionStatusMessage requestConnectionStatusMessage) {
bool connected = false;
if (_mqttClient != null && _mqttClient!.connectionStatus != null) {
if (_mqttClient!.connectionStatus!.state == MqttConnectionState.connected) {
@@ -569,7 +578,8 @@ class MqttCore {
}
}
MessageService().publish<CurrentConnectionStatusMessage>(Constants.messageTopicCurrentConnectionStatus, arguments: CurrentConnectionStatusMessage(state: connected));
MessageService().publish<CurrentConnectionStatusMessage>(Constants.messageTopicCurrentConnectionStatus,
arguments: CurrentConnectionStatusMessage(state: connected));
});
}
}