示例#1
0
        public static void TestZero <T>(IZeroMessageSerializer <T> serializer, T message, string expectedData = null) where T : P2PMessage
        {
            IByteBuffer buffer  = PooledByteBufferAllocator.Default.Buffer(1024 * 16);
            IByteBuffer buffer2 = PooledByteBufferAllocator.Default.Buffer(1024 * 16);

            try
            {
                serializer.Serialize(buffer, message);
                T deserialized = serializer.Deserialize(buffer);
                deserialized.Should().BeEquivalentTo(message);

                Assert.AreEqual(0, buffer.ReadableBytes, "readable bytes");

                serializer.Serialize(buffer2, deserialized);

                buffer.SetReaderIndex(0);
                string allHex = buffer.ReadAllHex();
                Assert.AreEqual(allHex, buffer2.ReadAllHex(), "test zero");

                if (expectedData != null)
                {
                    allHex.Should().BeEquivalentTo(expectedData);
                }
            }
            finally
            {
                buffer.Release();
                buffer2.Release();
            }
        }
示例#2
0
        public static void TestZero <T>(IZeroMessageSerializer <T> serializer, T message, string expectedData = null) where T : P2PMessage
        {
            IByteBuffer buffer  = PooledByteBufferAllocator.Default.Buffer(1024 * 16);
            IByteBuffer buffer2 = PooledByteBufferAllocator.Default.Buffer(1024 * 16);

            try
            {
                serializer.Serialize(buffer, message);
                T deserialized = serializer.Deserialize(buffer);

                // RlpLength is calculated explicitly when serializing an object by Calculate method. It's null after deserialization.
                deserialized.Should().BeEquivalentTo(message, options => options.Excluding(c => c.Name == "RlpLength"));

                Assert.AreEqual(0, buffer.ReadableBytes, "readable bytes");

                serializer.Serialize(buffer2, deserialized);

                buffer.SetReaderIndex(0);
                string allHex = buffer.ReadAllHex();
                Assert.AreEqual(allHex, buffer2.ReadAllHex(), "test zero");

                if (expectedData != null)
                {
                    allHex.Should().BeEquivalentTo(expectedData);
                }
            }
            finally
            {
                buffer.Release();
                buffer2.Release();
            }
        }
示例#3
0
        public static T Deserialize <T>(this IZeroMessageSerializer <T> serializer, byte[] message) where T : MessageBase
        {
            var buffer = UnpooledByteBufferAllocator.Default.Buffer(message.Length);

            buffer.WriteBytes(message);
            return(serializer.Deserialize(buffer));
        }
示例#4
0
        public static byte[] Serialize <T>(this IZeroMessageSerializer <T> serializer, T message) where T : MessageBase
        {
            IByteBuffer byteBuffer = UnpooledByteBufferAllocator.Default.Buffer(64);

            serializer.Serialize(byteBuffer, message);
            return(byteBuffer.ReadAllBytes());
        }
        public T Deserialize <T>(IByteBuffer buffer) where T : MessageBase
        {
            IMessageSerializer <T>     serializer     = GetSerializer <T>();
            IZeroMessageSerializer <T> zeroSerializer = serializer as IZeroMessageSerializer <T>;

            if (zeroSerializer != null)
            {
                return(zeroSerializer.Deserialize(buffer));
            }

            return(serializer.Deserialize(buffer.ReadAllBytes()));
        }
        public void Serialize <T>(T message, IByteBuffer byteBuffer) where T : MessageBase
        {
            IMessageSerializer <T>     serializer     = GetSerializer <T>();
            IZeroMessageSerializer <T> zeroSerializer = serializer as IZeroMessageSerializer <T>;

            if (zeroSerializer != null)
            {
                zeroSerializer.Serialize(byteBuffer, message);
            }
            else
            {
                byte[] serialized = serializer.Serialize(message);
                byteBuffer.EnsureWritable(serialized.Length, true);
                byteBuffer.WriteBytes(serialized);
            }
        }
        public static byte[] Serialize <T>(this IZeroMessageSerializer <T> serializer, T message) where T : MessageBase
        {
            IByteBuffer byteBuffer = UnpooledByteBufferAllocator.Default.Buffer(
                serializer is IZeroInnerMessageSerializer <T> zeroInnerMessageSerializer
                    ? zeroInnerMessageSerializer.GetLength(message, out _)
                    : 64);

            try
            {
                serializer.Serialize(byteBuffer, message);
                return(byteBuffer.ReadAllBytes());
            }
            finally
            {
                byteBuffer.SafeRelease();
            }
        }
示例#8
0
        private bool TryGetZeroSerializer <T>(out IZeroMessageSerializer <T> serializer) where T : MessageBase
        {
            RuntimeTypeHandle typeHandle = typeof(T).TypeHandle;

            if (!_zeroSerializers.TryGetValue(typeHandle, out object serializerObject))
            {
                serializer = null;
                return(false);
            }

            if (!(serializerObject is IZeroMessageSerializer <T> messageSerializer))
            {
                throw new InvalidOperationException($"Zero serializer for {nameof(T)} (registered: {serializerObject?.GetType()?.Name}) does not implement required interfaces");
            }

            serializer = messageSerializer;
            return(true);
        }
示例#9
0
        public static void TestZero <T>(IZeroMessageSerializer <T> serializer, T message) where T : P2PMessage
        {
            IByteBuffer buffer  = PooledByteBufferAllocator.Default.Buffer(1024 * 16);
            IByteBuffer buffer2 = PooledByteBufferAllocator.Default.Buffer(1024 * 16);

            try
            {
                serializer.Serialize(buffer, message);
                T deserialized = serializer.Deserialize(buffer);

                Assert.AreEqual(0, buffer.ReadableBytes, "readable bytes");

                serializer.Serialize(buffer2, deserialized);

                buffer.SetReaderIndex(0);
                Assert.AreEqual(buffer.ReadAllHex(), buffer2.ReadAllHex(), "test zero");
            }
            finally
            {
                buffer.Release();
                buffer2.Release();
            }
        }
示例#10
0
 public void Register <T>(IZeroMessageSerializer <T> messageSerializer) where T : MessageBase
 {
     _zeroSerializers[typeof(T).TypeHandle] = messageSerializer;
 }
示例#11
0
 public SerializationBuilder With <T>(IZeroMessageSerializer <T> serializer) where T : MessageBase
 {
     TestObject.Register(serializer);
     return(this);
 }