public void Decode(IByteBuffer buffer, FixedHeader fixedHeader)
        {
            int remainingLength = fixedHeader.RemaingLength;

            // 协议名 Protocol Name
            // 协议级别 Protocol Level
            ProtocolName  = buffer.ReadString(ref remainingLength);
            ProtocolLevel = buffer.ReadByte();

            // 连接标志 Connect Flags
            int connectFlags = buffer.ReadByte();

            CleanSession = (connectFlags & 0x02) == 0x02;
            WillFlag     = (connectFlags & 0x04) == 0x04;
            if (WillFlag)
            {
                WillQos    = (MqttQos)((connectFlags & 0x18) >> 3);
                WillRetain = (connectFlags & 0x20) == 0x20;
            }
            UsernameFlag = (connectFlags & 0x80) == 0x80;
            PasswordFlag = (connectFlags & 0x40) == 0x40;

            // 保持连接 Keep Alive
            KeepAlive = (ushort)buffer.ReadShort();
        }
Beispiel #2
0
        public override void Encode(IByteBuffer buffer)
        {
            var buf = Unpooled.Buffer();

            try
            {
                if (SessionPresent)
                {
                    buf.WriteByte(1);  // 7 reserved 0-bits and SP = 1
                }
                else
                {
                    buf.WriteByte(0);  // 7 reserved 0-bits and SP = 0
                }
                buf.WriteByte((byte)ConnectReturnCode);

                FixedHeader.RemaingLength = buf.ReadableBytes;
                FixedHeader.WriteTo(buffer);
                buffer.WriteBytes(buf);
                buf = null;
            }
            finally
            {
                buf?.SafeRelease();
            }
        }
Beispiel #3
0
        public void Decode(IByteBuffer buffer, FixedHeader fixedHeader)
        {
            int remainingLength = fixedHeader.RemaingLength;

            PacketIdentifier = buffer.ReadUnsignedShort(ref remainingLength);
            if (PacketIdentifier == 0)
            {
                throw new DecoderException("[MQTT-2.3.1-1]");
            }
        }
Beispiel #4
0
        /// <summary>
        /// 解码
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="fixedHeader"></param>
        /// <param name="variableHeader"></param>
        public void Decode(IByteBuffer buffer, FixedHeader fixedHeader, ConnectVariableHeader variableHeader)
        {
            int remainingLength = fixedHeader.RemaingLength;

            ClientId = buffer.ReadString(ref remainingLength);
            if (variableHeader.WillFlag)
            {
                WillTopic = buffer.ReadString(ref remainingLength);
                //WillMessage = buffer.ReadBytes(3);
            }
        }
Beispiel #5
0
        public override void Encode(IByteBuffer buffer)
        {
            var buf = Unpooled.Buffer();

            try
            {
                VariableHeader.Encode(buf, FixedHeader);
                Payload.Encode(buf);
                FixedHeader.Encode(buffer, buf.ReadableBytes);
                buffer.WriteBytes(buf);
            }
            finally
            {
                buf?.Release();
            }
        }
Beispiel #6
0
        /// <summary>
        /// EncodePacketIdVariableHeader
        /// </summary>
        /// <param name="buffer"></param>
        public override void Encode(IByteBuffer buffer)
        {
            var buf = Unpooled.Buffer();

            try
            {
                WritePacketId(buf);
                FixedHeader.RemaingLength = buf.ReadableBytes;
                FixedHeader.WriteFixedHeader(buffer);
                buffer.WriteBytes(buf);
                buf = null;
            }
            finally
            {
                buf?.Release();
            }
        }
Beispiel #7
0
        public override void Encode(IByteBuffer buffer)
        {
            var buf = Unpooled.Buffer();

            try
            {
                //variable header
                buf.WriteString(ProtocolName);        //byte 1 - 8
                buf.WriteByte(ProtocolLevel);         //byte 9

                //connect flags;                      //byte 10
                var flags = UsernameFlag.ToByte() << 7;
                flags |= PasswordFlag.ToByte() << 6;
                flags |= WillRetain.ToByte() << 5;
                flags |= ((byte)WillQos) << 3;
                flags |= WillFlag.ToByte() << 2;
                flags |= CleanSession.ToByte() << 1;
                buf.WriteByte((byte)flags);

                //keep alive
                buf.WriteShort(KeepAlive);            //byte 11 - 12

                //payload
                buf.WriteString(ClientId);
                if (WillFlag)
                {
                    buf.WriteString(WillTopic);
                    buf.WriteBytes(WillMessage);
                }
                if (UsernameFlag && PasswordFlag)
                {
                    buf.WriteString(UserName);
                    buf.WriteString(Password);
                }

                FixedHeader.RemaingLength = buf.ReadableBytes;
                FixedHeader.WriteTo(buffer);
                buffer.WriteBytes(buf);
                buf = null;
            }
            finally
            {
                buf?.SafeRelease();
            }
        }
Beispiel #8
0
        public override void Encode(IByteBuffer buffer)
        {
            var buf = Unpooled.Buffer();

            try
            {
                buf.WriteString(TopicName);
                EncodePacketId(buf);
                buf.WriteBytes(Payload, 0, Payload.Length);

                FixedHeader.RemaingLength = buf.ReadableBytes;
                FixedHeader.WriteTo(buffer);
                buffer.WriteBytes(buf);
            }
            finally
            {
                buf?.Release();
            }
        }
Beispiel #9
0
        /// <summary>
        /// 编码
        /// </summary>
        /// <param name="buffer"></param>
        public override void Encode(IByteBuffer buffer)
        {
            var buf = Unpooled.Buffer();

            try
            {
                buf.WriteString(TopicName);
                if (Qos > MqttQos.AtMostOnce)
                {
                    buf.WriteUnsignedShort(PacketIdentifier);
                }
                buf.WriteBytes(Payload, 0, Payload.Length);

                FixedHeader.Encode(buffer, buf.ReadableBytes);
                buffer.WriteBytes(buf);
            }
            finally
            {
                buf?.Release();
            }
        }
Beispiel #10
0
        public override void Encode(IByteBuffer buffer)
        {
            var buf = Unpooled.Buffer();

            try
            {
                buf.WriteShort(PacketId);

                foreach (var item in _topics)
                {
                    buf.WriteString(item);
                }

                FixedHeader.RemaingLength = buf.ReadableBytes;
                FixedHeader.WriteTo(buffer);
                buffer.WriteBytes(buf);
            }
            finally
            {
                buf?.Release();
            }
        }
Beispiel #11
0
        public override void Encode(IByteBuffer buffer)
        {
            var buf = Unpooled.Buffer();

            try
            {
                buf.WriteUnsignedShort(PacketId);

                foreach (var item in _subscribeTopics)
                {
                    buf.WriteString(item.Topic);
                    buf.WriteByte((byte)item.Qos);
                }

                FixedHeader.RemaingLength = buf.ReadableBytes;
                FixedHeader.WriteFixedHeader(buffer);
                buffer.WriteBytes(buf);
            }
            finally
            {
                buf?.Release();
            }
        }
Beispiel #12
0
 /// <summary>
 /// 编码
 /// </summary>
 /// <param name="buffer"></param>
 public override void Encode(IByteBuffer buffer)
 {
     FixedHeader.Encode(buffer, 2);
     VariableHeader.Encode(buffer);
 }
Beispiel #13
0
 public void Encode(IByteBuffer buffer, FixedHeader fixedHeader)
 {
     buffer.WriteUnsignedShort(PacketIdentifier);
 }