示例#1
0
        public static void WriteField <TBufferWriter>(ref Buffers.Writer <TBufferWriter> writer, uint fieldIdDelta, Type expectedType, IPAddress value) where TBufferWriter : IBufferWriter <byte>
        {
            if (ReferenceCodec.TryWriteReferenceField(ref writer, fieldIdDelta, expectedType, value))
            {
                return;
            }

            writer.WriteFieldHeader(fieldIdDelta, expectedType, CodecFieldType, WireType.LengthPrefixed);
#if NET5_0_OR_GREATER
            Span <byte> buffer = stackalloc byte[64];
            if (value.TryWriteBytes(buffer, out var length))
            {
                var writable = writer.WritableSpan;
                if (writable.Length > length)
                {
                    writer.WriteVarUInt32((uint)length);
                    buffer.Slice(0, length).CopyTo(writable.Slice(1));
                    writer.AdvanceSpan(length);
                    return;
                }
            }
#endif
            var bytes = value.GetAddressBytes();
            writer.WriteVarUInt32((uint)bytes.Length);
            writer.Write(bytes);
        }
示例#2
0
        public static void WriteField <TBufferWriter>(ref Buffers.Writer <TBufferWriter> writer, uint fieldIdDelta, Type expectedType, IPEndPoint value) where TBufferWriter : IBufferWriter <byte>
        {
            if (ReferenceCodec.TryWriteReferenceField(ref writer, fieldIdDelta, expectedType, value))
            {
                return;
            }

            writer.WriteFieldHeader(fieldIdDelta, expectedType, CodecFieldType, WireType.TagDelimited);
            IPAddressCodec.WriteField(ref writer, 1, IPAddressCodec.CodecFieldType, value.Address);
            UInt16Codec.WriteField(ref writer, 1, UInt16Codec.CodecFieldType, (ushort)value.Port);
            writer.WriteEndObject();
        }