public async Task SerializeAsync(Stream stream, object message, Type type, CancellationToken cancellationToken = default)
        {
            using (var serializedMemory = SerializeCore(message, type))
            {
                var uncompressed = serializedMemory.Memory;

                var compressedBuff = ArrayPool <byte> .Shared.Rent(LZ4Codec.MaximumOutputSize(uncompressed.Length) + HeaderLength);

                try
                {
                    //write body, skip header
                    var compressedLength = LZ4Codec.Encode(
                        uncompressed.Span,
                        new Span <byte>(compressedBuff, HeaderLength, compressedBuff.Length - HeaderLength));

                    //write header
                    var offset = 0;
                    SerializerBinary.WriteByte(ref compressedBuff, ref offset, Header);
                    SerializerBinary.WriteInt32Fixed(ref compressedBuff, ref offset, compressedLength);
                    SerializerBinary.WriteInt32Fixed(ref compressedBuff, ref offset, uncompressed.Length);

                    await stream.WriteAsync(compressedBuff, 0, compressedLength + HeaderLength, cancellationToken).ConfigureAwait(false);
                }
                finally
                {
                    ArrayPool <byte> .Shared.Return(compressedBuff);
                }
            }
        }
Example #2
0
        public void Serialize(ref byte[] buffer, ref int offset, Color value)
        {
            bool isKnown = value.IsKnownColor;

            SerializerBinary.WriteByte(ref buffer, ref offset, isKnown ? (byte)1 : (byte)0);

            if (isKnown)
            {
                int knownColor = (int)value.ToKnownColor();
                SerializerBinary.WriteInt32Fixed(ref buffer, ref offset, knownColor);
            }
            else
            {
                SerializerBinary.WriteInt32Fixed(ref buffer, ref offset, value.ToArgb());
            }
        }
Example #3
0
 public void Serialize(ref byte[] buffer, ref int offset, Color value)
 {
     SerializerBinary.WriteInt32Fixed(ref buffer, ref offset, value.ToArgb());
 }