Пример #1
0
 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);
             }
         }
     }
 }
Пример #2
0
        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;
            }
        }