public MqttSubAckPacket CreateSubAckPacket(MqttSubscribePacket subscribePacket, SubscribeResult subscribeResult) { if (subscribePacket == null) { throw new ArgumentNullException(nameof(subscribePacket)); } if (subscribeResult == null) { throw new ArgumentNullException(nameof(subscribeResult)); } var subackPacket = new MqttSubAckPacket { PacketIdentifier = subscribePacket.PacketIdentifier }; subackPacket.ReturnCodes.AddRange(subscribeResult.ReturnCodes); return(subackPacket); }
public MqttSubAckPacket Create(MqttSubscribePacket subscribePacket, SubscribeResult subscribeResult) { if (subscribePacket == null) { throw new ArgumentNullException(nameof(subscribePacket)); } if (subscribeResult == null) { throw new ArgumentNullException(nameof(subscribeResult)); } var subAckPacket = new MqttSubAckPacket { PacketIdentifier = subscribePacket.PacketIdentifier, ReasonCodes = subscribeResult.ReasonCodes, ReasonString = subscribeResult.ReasonString, UserProperties = subscribeResult.UserProperties }; return(subAckPacket); }
public void Serialize_Full_MqttSubAckPacket_V311() { var subAckPacket = new MqttSubAckPacket { PacketIdentifier = 123, ReasonString = "ReasonString", ReasonCodes = new List <MqttSubscribeReasonCode> { MqttSubscribeReasonCode.GrantedQoS1 }, UserProperties = new List <MqttUserProperty> { new MqttUserProperty("Foo", "Bar") } }; var deserialized = MqttPacketSerializationHelper.EncodeAndDecodePacket(subAckPacket, MqttProtocolVersion.V311); Assert.AreEqual(subAckPacket.PacketIdentifier, deserialized.PacketIdentifier); Assert.AreEqual(null, deserialized.ReasonString); // Not supported in v3.1.1 Assert.AreEqual(subAckPacket.ReasonCodes.Count, deserialized.ReasonCodes.Count); Assert.AreEqual(subAckPacket.ReasonCodes[0], deserialized.ReasonCodes[0]); CollectionAssert.AreEqual(null, deserialized.UserProperties); // Not supported in v3.1.1 }
MqttPacket DecodeSubAckPacket(ArraySegment <byte> body) { ThrowIfBodyIsEmpty(body); _bufferReader.SetBuffer(body.Array, body.Offset, body.Count); var packet = new MqttSubAckPacket { PacketIdentifier = _bufferReader.ReadTwoByteInteger() }; var propertiesReader = new MqttV5PropertiesReader(_bufferReader); while (propertiesReader.MoveNext()) { if (propertiesReader.CurrentPropertyId == MqttPropertyId.ReasonString) { packet.ReasonString = propertiesReader.ReadReasonString(); } else { propertiesReader.ThrowInvalidPropertyIdException(typeof(MqttSubAckPacket)); } } packet.UserProperties = propertiesReader.CollectedUserProperties; packet.ReasonCodes = new List <MqttSubscribeReasonCode>(_bufferReader.BytesLeft); while (!_bufferReader.EndOfStream) { var reasonCode = (MqttSubscribeReasonCode)_bufferReader.ReadByte(); packet.ReasonCodes.Add(reasonCode); } return(packet); }
private static MqttBasePacket DecodeSubAckPacket(IMqttPacketBodyReader body) { ThrowIfBodyIsEmpty(body); var packet = new MqttSubAckPacket { PacketIdentifier = body.ReadTwoByteInteger(), Properties = new MqttSubAckPacketProperties() }; var propertiesReader = new MqttV500PropertiesReader(body); while (propertiesReader.MoveNext()) { if (propertiesReader.CurrentPropertyId == MqttPropertyId.ReasonString) { packet.Properties.ReasonString = propertiesReader.ReadReasonString(); } else if (propertiesReader.CurrentPropertyId == MqttPropertyId.UserProperty) { propertiesReader.AddUserPropertyTo(packet.Properties.UserProperties); } else { propertiesReader.ThrowInvalidPropertyIdException(typeof(MqttSubAckPacket)); } } while (!body.EndOfStream) { var reasonCode = (MqttSubscribeReasonCode)body.ReadByte(); packet.ReasonCodes.Add(reasonCode); } return(packet); }
byte EncodeSubAckPacket(MqttSubAckPacket packet) { if (packet.ReasonCodes?.Any() != true) { throw new MqttProtocolViolationException("At least one reason code must be set[MQTT - 3.8.3 - 3]."); } ThrowIfPacketIdentifierIsInvalid(packet.PacketIdentifier, packet); _bufferWriter.WriteTwoByteInteger(packet.PacketIdentifier); _propertiesWriter.WriteReasonString(packet.ReasonString); _propertiesWriter.WriteUserProperties(packet.UserProperties); _propertiesWriter.WriteTo(_bufferWriter); _propertiesWriter.Reset(); foreach (var reasonCode in packet.ReasonCodes) { _bufferWriter.WriteByte((byte)reasonCode); } return(MqttBufferWriter.BuildFixedHeader(MqttControlPacketType.SubAck)); }
public MqttClientSubscribeResult CreateClientSubscribeResult(MqttSubscribePacket subscribePacket, MqttSubAckPacket subAckPacket) { if (subscribePacket == null) { throw new ArgumentNullException(nameof(subscribePacket)); } if (subAckPacket == null) { throw new ArgumentNullException(nameof(subAckPacket)); } if (subAckPacket.ReasonCodes.Count != subscribePacket.TopicFilters.Count) { throw new MqttProtocolViolationException("The reason codes are not matching the topic filters [MQTT-3.9.3-1]."); } var result = new MqttClientSubscribeResult(); result.Items.AddRange(subscribePacket.TopicFilters.Select((t, i) => new MqttClientSubscribeResultItem(t, (MqttClientSubscribeResultCode)subAckPacket.ReasonCodes[i]))); return(result); }
static MqttClientSubscribeResultItem CreateSubscribeResultItem(int index, MqttSubscribePacket subscribePacket, MqttSubAckPacket subAckPacket) { var resultCode = (MqttClientSubscribeResultCode)subAckPacket.ReasonCodes[index]; return(new MqttClientSubscribeResultItem { TopicFilter = subscribePacket.TopicFilters[index], ResultCode = resultCode, }); }