Fehler Merge behoben

This commit is contained in:
Sven committed 2024-03-27 15:11:31 +01:00
1 parent 721dbd861c
commit eb1e18d042
10 files changed
+205 -148

No files matched your search

+72 -91
View File
@@ -4,11 +4,14 @@ import 'dart:math';
import 'package:archive/archive.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:http/http.dart' as http;
import 'package:isar/isar.dart';
import 'package:mqtt_client/mqtt_client.dart';
import 'package:mqtt_client/mqtt_server_client.dart';
import 'package:stadtbote/model/enqueued_message.dart';
import 'package:stadtbote/model/job.dart';
import 'package:stadtbote/model/log_entry.dart';
import 'package:stadtbote/model/message.dart';
import 'package:stadtbote/model/status.dart';
import 'package:stadtbote/protocoll_messages/acknowledge_job.dart';
import 'package:stadtbote/protocoll_messages/bootstrap_request.dart';
@@ -16,9 +19,6 @@ import 'package:stadtbote/protocoll_messages/bootstrap_response_payload.dart';
import 'package:stadtbote/protocoll_messages/device_log_request.dart';
import 'package:stadtbote/protocoll_messages/device_log_response.dart';
import 'package:stadtbote/protocoll_messages/device_object.dart';
import 'package:stadtbote/model/job.dart';
import 'package:stadtbote/model/message.dart';
import 'package:stadtbote/protocoll_messages/payload_container.dart';
import 'package:stadtbote/protocoll_messages/start_session_message.dart';
import 'package:stadtbote/protocoll_messages/sync_jobs_message.dart';
import 'package:stadtbote/protocoll_messages/track_message.dart';
@@ -31,8 +31,6 @@ 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:http/http.dart' as http;
import 'package:uuid/uuid.dart';
import '../main.dart';
import '../model/session_status.dart';
@@ -52,6 +50,7 @@ class MqttCore {
late bool _disconnectInProgress = false;
late String _brokerUri;
late String _clientId;
late int _brokerPort;
late String _fromServerTopic;
late String _toServerTopic;
@@ -101,8 +100,8 @@ class MqttCore {
_mqttClient.connectionMessage = MqttConnectMessage()
.withClientIdentifier(await Util.getAppUuid())
.withWillQos(MqttQos.atMostOnce)
.withWillTopic('willTopic')
.withWillMessage('willMessage')
//.withWillTopic('willTopic')
//.withWillMessage('willMessage')
.authenticateAs("app", "apppwd");
await _mqttClient.connect();
@@ -145,83 +144,65 @@ class MqttCore {
var buffer = Uint8Buffer();
buffer.addAll(utf8.encode(text));
_mqttClient.publishMessage(topic, MqttQos.exactlyOnce, buffer);
var fullTopic = "$_toServerTopic$topic/$_clientId";
Util.logInfo("message\n$text\nsend to $topic");
}
_mqttClient.publishMessage(fullTopic, MqttQos.exactlyOnce, buffer);
publishPayloadMessage(String topic, Map<String, dynamic> payload) {
var payloadContainer = PayloadContainer();
payloadContainer.id = const Uuid().v4().toString();
payloadContainer.recv = topic;
payloadContainer.store = true;
payloadContainer.payload = payload;
var json = jsonEncode(payloadContainer.toJson());
try {
publishText(_toServerTopic, json);
} catch (e) {
_enqueueMessage(_toServerTopic, jsonEncode(payloadContainer.toJson()));
}
Util.logInfo("message\n$text\nsend to $fullTopic");
}
void _setupSubscriptions() async {
Util.logInfo('_setupSubscriptions called');
_mqttClient.updates?.listen((List<MqttReceivedMessage<MqttMessage>> c) {
_mqttClient.updates?.listen((List<MqttReceivedMessage<MqttMessage>> messages) {
try {
final MqttPublishMessage message = c[0].payload as MqttPublishMessage;
String payload = utf8.decode(MqttPublishPayload.bytesToStringAsString(message.payload.message).codeUnits);
var topic = message.variableHeader?.topicName;
for (var mqttMessage in messages) {
final MqttPublishMessage message = mqttMessage.payload as MqttPublishMessage;
Util.logInfo('message received\ntopic: $topic\nmessage: $payload');
if (message.variableHeader!.topicName.endsWith(_clientId)) {
String payload = utf8.decode(MqttPublishPayload.bytesToStringAsString(message.payload.message).codeUnits);
var topicArray = message.variableHeader?.topicName;
var topicArraySplited = topicArray!.split("/");
var topic = topicArraySplited[3];
Map<String, dynamic> messageData = jsonDecode(payload);
Util.logInfo('message received\ntopic: $topic\nmessage: $payload');
for (var entry in messageData.keys) {
if (entry == 'payload') {
var payload = messageData[entry];
for (var payloadEntry in payload.keys) {
var payloadData = payload[payloadEntry];
switch(topic) {
case 'session':
_sessionMessageReceived(jsonDecode(payload));
break;
switch(payloadEntry) {
case 'session':
_sessionMessageReceived(payloadData);
break;
case 'status':
_statusMessageReceived(jsonDecode(payload));
break;
case 'status':
_statusMessageReceived(payloadData);
break;
case 'ranks':
//_rankingMessageReceived(messageData);
break;
case 'ranks':
_rankingMessageReceived(payloadData);
break;
case 'job':
_jobMessageReceived(jsonDecode(payload));
break;
case 'jobs':
_jobMessageReceived(payloadData);
break;
case 'job_del':
_jobDeleteReceived(jsonDecode(payload));
break;
case 'job_del':
_jobDeleteReceived(payloadData);
break;
case 'sync_request':
_syncRequestReceived(jsonDecode(payload));
break;
case 'sync_request':
_syncRequestReceived(payloadData);
break;
case "mssg":
_messageMessageReceived(jsonDecode(payload));
break;
case "mssg":
_messageMessageReceived(payloadData);
break;
case "upload_device_log":
_messageUploadDeviceLogReceived(jsonDecode(payload));
break;
case "upload_device_log":
_messageUploadDeviceLogReceived(payloadData);
break;
default:
Util.logInfo('Unknown topic: $payloadEntry');
break;
}
default:
Util.logInfo('Unknown topic: $topic');
break;
}
}
}
@@ -230,8 +211,9 @@ class MqttCore {
}
});
_mqttClient.subscribe(_fromServerTopic, MqttQos.exactlyOnce);
Util.logInfo('subscribed to topic: $_fromServerTopic');
var fromServerTopic = "$_fromServerTopic#";
_mqttClient.subscribe(fromServerTopic, MqttQos.exactlyOnce);
Util.logInfo('subscribed to topic: $fromServerTopic');
MessageService().publish<ConnectionStatus>(Constants.messageTopicConnectionStatusChanged, arguments: ConnectionStatus(status: ConnectionStatusEnum.connected));
}
@@ -243,7 +225,7 @@ class MqttCore {
await _sendEnqueuedMessages();
var sessionStatusMessage = SessionStatus.fromJson(payloadData['status']);
var sessionStatusMessage = SessionStatus.fromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.sessionStatus.clear();
@@ -279,28 +261,26 @@ class MqttCore {
}
void _jobMessageReceived(payloadData) async {
for (var foundJobData in payloadData) {
Job newJob = Job.fromJson(foundJobData);
Job newJob = Job.fromJson(payloadData);
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.jobs.put(newJob);
});
await MyApp.isarInstance.writeTxn(() async {
await MyApp.isarInstance.jobs.put(newJob);
});
if (newJob.state == Constants.stateAssigned) {
if (newJob.global) {
await Util.playMp3('aaa.mp3');
} else {
await Util.playMp3('job_received.mp3');
}
if (newJob.state == Constants.stateAssigned) {
if (newJob.global) {
await Util.playMp3('aaa.mp3');
} else {
await Util.playMp3('job_received.mp3');
}
}
try {
MessageService().publish<JobReceivedMessage>(Constants.messageTopicJobReceived, arguments: JobReceivedMessage(job: newJob));
} catch (ex) {
Util.logException("publish messageTopicJobReceived failed!");
}
_acknowlegdeJob(newJob);
_acknowlegdeJob(newJob);
try {
MessageService().publish<JobReceivedMessage>(Constants.messageTopicJobReceived, arguments: JobReceivedMessage(job: newJob));
} catch (ex) {
Util.logException("publish messageTopicJobReceived failed!");
}
}
@@ -402,18 +382,19 @@ class MqttCore {
handshakeMessage.ver = await Util.getAppVersion();
var jsonMap = handshakeMessage.toJson();
var json = jsonEncode(jsonMap);
var uri = "http://test-app-server.dns.army:8080=$json";
var json = Uri.encodeFull(jsonEncode(jsonMap));
var uri = "http://test-app-server.dns.army:8080/bootstrap?json=$json";
Util.logInfo("Bootstrap request: $uri");
var response = await http.get(Uri.parse(uri));
var responseText = response.body;
var bootstrapResponsePayload = BootstrapResponse.fromJson(jsonDecode(responseText)["payload"]);
var bootstrapResponsePayload = BootstrapResponse.fromJson(jsonDecode(responseText));
var brokerUriAndPortArray = bootstrapResponsePayload.broker.replaceFirst("mqtt://", "").split(":");
_brokerUri = brokerUriAndPortArray[0];
_brokerPort = int.parse(brokerUriAndPortArray[1]);
_clientId = bootstrapResponsePayload.id;
_fromServerTopic = bootstrapResponsePayload.fromServer;
_toServerTopic = bootstrapResponsePayload.toServer;
@@ -446,7 +427,7 @@ class MqttCore {
answer.sync.jobs.add(syncJob);
}
MqttCore.instance.publishPayloadMessage("server", answer.toJson());
MqttCore.instance.publishText("sync_request_response", jsonEncode(answer.toJson()));
}
void _startTrackTimer() {
@@ -460,7 +441,7 @@ class MqttCore {
trackMessage.pos!.long = position.longitude;
trackMessage.pos!.acc = position.accuracy.toInt();
publishPayloadMessage("track", trackMessage.toJson());
publishText("track", jsonEncode(trackMessage.toJson()));
}
});
}
@@ -507,6 +488,6 @@ class MqttCore {
message.received.ver = job.ver;
message.received.utc = DateTime.now().millisecondsSinceEpoch;
MqttCore.instance.publishPayloadMessage('job', message.toJson());
MqttCore.instance.publishText('job', jsonEncode(message.toJson()));
}
}