コード例 #1
0
        public void Test_Serialize_And_Deserialize_PullRespPacket()
        {
            var networkPacket = new PullRespPacket
            {
                ProtocolVersion = 1,
                Payload         = new PullRespPacketPayload
                {
                    Txpk = new Txpk
                    {
                        Time = DateTime.UtcNow,
                        Tmst = GpsTime.Time,
                        Codr = CodeRate.CR_LORA_4_5,
                        Data = "asd",
                        Datr = DatarateIdentifier.SF10BW125,
                        Rfch = 1,
                        Freq = 868.500000,
                        Fdev = 1,
                    }
                }
            };

            var serializer = new PicocellPacketSerializer();

            using (var stream = new MemoryStream())
            {
                var length = serializer.Serialize(networkPacket, stream);

                stream.Position = 0;

                //var message = Encoding.Default.GetString(data);

                var result = serializer.Deserialize(stream);
            }
        }
コード例 #2
0
        private async Task ReceiveWorker(CancellationToken cancellationToken)
        {
            Microsoft.Azure.Devices.Client.Message message = null;
            INetworkPacket packet = null;

            while (!cancellationToken.IsCancellationRequested)
            {
                try
                {
                    message = await _device.Receive();

                    if (message == null)
                    {
                        continue;
                    }

                    var messageType = MessageType.PULL_RESP;// Enum.Parse(typeof(MessageType), message.Properties["MessageType"]);

                    var data = message.GetBytes();

                    _logger.Info($"Receiving '{messageType}' packet from IoT Hub by deviceid '{_deviceId}'", GetType().Name);

                    switch (messageType)
                    {
                    case MessageType.PULL_RESP:
                    {
                        packet = new PullRespPacket
                        {
                            ProtocolVersion = int.Parse(message.Properties["ProtocolVersion"]),
                            //Token = message.Properties["Token"],
                            Payload = _payloadSerializer.Deserialize <PullRespPacketPayload>(data),
                        };
                    }
                    break;

                    default:
                    {
                        continue;
                    }
                    }

                    PacketReceived(this, new PacketEventArgs(packet, this));
                }
                catch (BrokenCircuitException ex)
                {
                    _logger.Error($"Circuit breaker open -> An error occured while receiving a message from IoT Hub by deviceid '{_deviceId}'", GetType().Name, ex);

                    await Task.Delay(TimeSpan.FromSeconds(30));
                }
                catch (Exception ex)
                {
                    _logger.Error($"An error occured while receiving a message from IoT Hub by deviceid '{_deviceId}'", GetType().Name, ex);
                }
            }
        }
コード例 #3
0
        private void Handle(PullRespPacket packet, IEndPointBinding cloudBinding)
        {
            _logger.Info($"PullResp packet received from {cloudBinding.ToString()}", GetType().Name);

            if (!_gatewayChannels.TryGetValue(Direction.Downstream, out var channel))
            {
                return;
            }

            _logger.Info($"Sending PullResp packet to {_gatewayChannels[Direction.Downstream].Binding.ToString()}", GetType().Name);

            _gatewayChannels[Direction.Downstream]
            .Binding
            .SendAsync(packet);
        }