public static int WriteTo <T>(Span <byte> span, ushort channel, T header, int bodyLength) where T : ContentHeaderBase { const int StartClassId = StartPayload; const int StartBodyLength = StartPayload + 4; const int StartHeaderArguments = StartPayload + 12; int payloadLength = 12 + header.WritePropertiesTo(span.Slice(StartHeaderArguments)); NetworkOrderSerializer.WriteUInt64(ref span.GetStart(), ((ulong)Constants.FrameHeader << 56) | ((ulong)channel << 40) | ((ulong)payloadLength << 8)); NetworkOrderSerializer.WriteUInt32(ref span.GetOffset(StartClassId), (uint)header.ProtocolClassId << 16); // The last 16 bytes (Weight) aren't used NetworkOrderSerializer.WriteUInt64(ref span.GetOffset(StartBodyLength), (ulong)bodyLength); span[payloadLength + StartPayload] = Constants.FrameEnd; return(payloadLength + BaseFrameSize); }
public static int WriteTo(Span <byte> span, ushort channel, ContentHeaderBase header, int bodyLength) { const int StartClassId = StartPayload; const int StartWeight = StartPayload + 2; const int StartBodyLength = StartPayload + 4; const int StartHeaderArguments = StartPayload + 12; NetworkOrderSerializer.WriteUInt16(span.Slice(StartClassId), header.ProtocolClassId); NetworkOrderSerializer.WriteUInt16(span.Slice(StartWeight), 0); // Weight - not used NetworkOrderSerializer.WriteUInt64(span.Slice(StartBodyLength), (ulong)bodyLength); var headerWriter = new ContentHeaderPropertyWriter(span.Slice(StartHeaderArguments)); header.WritePropertiesTo(ref headerWriter); return(WriteBaseFrame(span, FrameType.FrameHeader, channel, StartHeaderArguments - StartPayload + headerWriter.Offset)); }
public void TestWriteUInt64() { byte[] bytes = new byte[8]; NetworkOrderSerializer.WriteUInt64(bytes, 0x89ABCDEF01234567); Check(bytes, new byte[] { 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67 }); }
public static int WriteLonglong(Memory <byte> memory, ulong val) { NetworkOrderSerializer.WriteUInt64(memory, val); return(8); }
public static int WriteLonglong(Span <byte> span, ulong val) { NetworkOrderSerializer.WriteUInt64(span, val); return(8); }