private async Task HandleReceivedMessages() { while (true) { _logger.LogInformation("Waiting for messages to handle..."); _handleMessageEvent.WaitOne(); while (_messagesToHandle.TryDequeue(out string messageAsString)) { EndNodeMessage message = DeserializeMessage(messageAsString); _logger.LogInformation("Deserialized message: " + JsonSerializer.Serialize <object>(message)); if (message != null) { await InformListeners(message); } } } }
private async Task HandleReceivedMessage(EndNodeMessage message) { IServiceScope scope = _serviceProvider.CreateScope(); var detectionSystemService = scope.ServiceProvider.GetRequiredService <DetectionSystemService>(); var endNodeCommunicator = scope.ServiceProvider.GetRequiredService <IEndNodeCommunicator>(); _logger.LogInformation("Handing received message: " + JsonSerializer.Serialize <object>(message)); switch (message.MessageType) { case EndNodeMessageType.SendRequestAck: var newStatus = ((SendRequestAckMessage)message).Successful ? ConfigurationStatus.AcknowledgedByNetwork : ConfigurationStatus.ErrorByNetwork; await detectionSystemService.SetDeviceConfigurationStatus(message.DeviceEui, newStatus); break; case EndNodeMessageType.GatewayConfirmation: if ((await detectionSystemService.GetDevice(message.DeviceEui)).Configuration.Status < ConfigurationStatus.SentToGateway) { await detectionSystemService.SetDeviceConfigurationStatus(message.DeviceEui, ConfigurationStatus.SentToGateway); } break; case EndNodeMessageType.UplinkMessage: var uplinkMessage = (UplinkDataMessage)message; await detectionSystemService.SendAndSaveNotifications(new[] { new UplinkMessage { Data = uplinkMessage.Data, DeviceEui = uplinkMessage.DeviceEui, Timestamp = uplinkMessage.Timestamp } }); Device device = await detectionSystemService.GetDevice(message.DeviceEui); // if (device.Configuration.Status == ConfigurationStatus.SentToGateway) // { // await detectionSystemService.SetDeviceConfigurationStatus(message.DeviceEui, ConfigurationStatus.SentToDevice); // } // else if (device.Configuration.Status == ConfigurationStatus.SentToDevice) // { if (uplinkMessage.Ack) { await detectionSystemService.SetDeviceConfigurationStatus(message.DeviceEui, ConfigurationStatus.Acknowledged); } // else // { // endNodeCommunicator.SendMessage(new DownlinkDataMessage // { // Confirmed = true, // DeviceEui = device.DeviceEui, // Data = DetectionSystemServiceUtil.ConfigurationToDataString(device.Configuration.ScanMinuteOfTheDay, device.Configuration.HeartbeatPeriodDays) // }); // await detectionSystemService.SetDeviceConfigurationStatus(device.DeviceEui, ConfigurationStatus.SentToNetwork); // } // } break; } }