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(); }
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(); } }
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]"); } }
/// <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); } }
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(); } }
/// <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(); } }
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(); } }
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(); } }
/// <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(); } }
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(); } }
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(); } }
/// <summary> /// 编码 /// </summary> /// <param name="buffer"></param> public override void Encode(IByteBuffer buffer) { FixedHeader.Encode(buffer, 2); VariableHeader.Encode(buffer); }
public void Encode(IByteBuffer buffer, FixedHeader fixedHeader) { buffer.WriteUnsignedShort(PacketIdentifier); }