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(); } }
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(); } }
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)); }
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(); } }
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); }
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(); } }
public void Register <T>(IZeroMessageSerializer <T> messageSerializer) where T : MessageBase { _zeroSerializers[typeof(T).TypeHandle] = messageSerializer; }
public SerializationBuilder With <T>(IZeroMessageSerializer <T> serializer) where T : MessageBase { TestObject.Register(serializer); return(this); }