コード例 #1
0
            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);
            }
コード例 #2
0
            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 });
 }
コード例 #4
0
 public static int WriteLonglong(Memory <byte> memory, ulong val)
 {
     NetworkOrderSerializer.WriteUInt64(memory, val);
     return(8);
 }
コード例 #5
0
 public static int WriteLonglong(Span <byte> span, ulong val)
 {
     NetworkOrderSerializer.WriteUInt64(span, val);
     return(8);
 }