public ArraySegment <byte> Encode(MqttBasePacket packet) { if (packet == null) { throw new ArgumentNullException(nameof(packet)); } // Leave enough head space for max header size (fixed + 4 variable remaining length = 5 bytes) _packetWriter.Reset(5); _packetWriter.Seek(5); var fixedHeader = EncodePacket(packet, _packetWriter); var remainingLength = (uint)(_packetWriter.Length - 5); var remainingLengthSize = MqttPacketWriter.GetLengthOfVariableInteger(remainingLength); var headerSize = FixedHeaderSize + remainingLengthSize; var headerOffset = 5 - headerSize; // Position cursor on correct offset on beginning of array (has leading 0x0) _packetWriter.Seek(headerOffset); _packetWriter.Write(fixedHeader); _packetWriter.WriteVariableLengthInteger(remainingLength); var buffer = _packetWriter.GetBuffer(); return(new ArraySegment <byte>(buffer, headerOffset, _packetWriter.Length - headerOffset)); }
public static byte[] AddMqttHeader(this IMqttPacketWriter writer, MqttControlPacketType header, byte[] body) { writer.Write(MqttPacketWriter.BuildFixedHeader(header)); writer.WriteVariableLengthInteger((uint)body.Length); writer.Write(body, 0, body.Length); return(writer.GetBuffer()); }
public void WriteTo(IMqttPacketWriter packetWriter) { if (packetWriter == null) { throw new ArgumentNullException(nameof(packetWriter)); } packetWriter.WriteVariableLengthInteger((uint)_packetWriter.Length); packetWriter.Write(_packetWriter); }