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); } }
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); } } }
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); }