internal override void Serialize(PacketWriter writer, MqttProtocolVersion protocolVersion) { if (Topics.Length != QosLevels.Length) { throw new InvalidOperationException("The length of Topics should match the length of QosLevels"); } if (protocolVersion == MqttProtocolVersion.V3_1_1) { writer.SetFixedHeader(PacketType, MqttQos.AtLeastOnce); } else { writer.SetFixedHeader(PacketType); } writer.AppendIntegerField(PacketId); for (int i = 0; i < Topics.Length; i++) { if (String.IsNullOrEmpty(this.Topics[i]) || this.Topics[i].Length > Packet.MaxTopicLength) { throw new InvalidOperationException("Invalid topic length"); } writer.AppendTextField(this.Topics[i]); writer.Append((byte)(((byte)this.QosLevels[i]) & QosPartMask)); } }
void MakeVariableHeader(PacketWriter w) { if (this.ProtocolVersion == MqttProtocolVersion.V3_1) { w.AppendTextField(ProtocolNameV3_1); } else { w.AppendTextField(ProtocolNameV3_1_1); } w.Append((byte)this.ProtocolVersion); w.Append(MakeConnectFlags()); w.AppendIntegerField(KeepAlivePeriod); }
void MakePayload(PacketWriter w) { w.AppendTextField(ClientId); if (!String.IsNullOrEmpty(WillTopic)) { w.AppendTextField(WillTopic); } if (WillMessage != null) { w.AppendBytesField(WillMessage); } if (Username != null) { w.AppendTextField(Username); } if (Password != null) { w.AppendTextField(Password); } }
internal override void Serialize(PacketWriter writer, MqttProtocolVersion protocolVersion) { if (protocolVersion == MqttProtocolVersion.V3_1_1) { writer.SetFixedHeader(PacketType, MqttQos.AtLeastOnce); } else { writer.SetFixedHeader(PacketType); } writer.AppendIntegerField(PacketId); foreach (string topic in this.Topics) { writer.AppendTextField(topic); } }
internal override void Serialize(PacketWriter writer, MqttProtocolVersion protocolVersion) { Validate(); if (protocolVersion == MqttProtocolVersion.V3_1_1) { writer.SetFixedHeader(PacketType, MqttQos.AtLeastOnce); } else { writer.SetFixedHeader(PacketType); } writer.AppendIntegerField(PacketId); for (int i = 0; i < Topics.Length; i++) { writer.AppendTextField(this.Topics[i]); writer.Append((byte)(((byte)this.QosLevels[i]) & QosPartMask)); } }
internal override void Serialize(PacketWriter writer, MqttProtocolVersion protocolVersion) { if (protocolVersion == MqttProtocolVersion.V3_1_1) { if (this.QosLevel == MqttQos.AtMostOnce && this.PacketId > 0) { throw new ArgumentException("When using QoS 0 (at most once) the PacketId must not be set"); } } writer.SetFixedHeader(PacketType, DupFlag, QosLevel, Retain); // variable header writer.AppendTextField(this.Topic); if (this.QosLevel > MqttQos.AtMostOnce) { writer.AppendIntegerField(this.PacketId); } writer.Append(this.Message); }