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));
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
        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);
            }
        }
Пример #5
0
        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));
            }
        }
Пример #6
0
        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);
        }
Пример #7
0
 internal override void Serialize(PacketWriter writer, MqttProtocolVersion protocolVersion)
 {
     writer.SetFixedHeader(PacketType);
     writer.AppendIntegerField(PacketId);
 }