/// <summary> /// Create <see cref="RequestMessageSerializer"/> with specified tracer(s). /// </summary> /// <param name="serializingRequestTracer">Tracer for serializing request.</param> /// <param name="serializedRequestTracer">Tracer for serialized request binary stream.</param> /// <param name="deserializingRequestTracer">Tracer for deserializing request binary stream.</param> /// <param name="deserializedRequestTracer">Tracer for deserialized request.</param> /// <returns><see cref="RequestMessageSerializer"/> with specified tracer(s).</returns> public static RequestMessageSerializer CreateRequestMessageSerializerWithTracer( SerializingRequestTracingFilterProvider serializingRequestTracer, SerializedRequestTracingFilterProvider serializedRequestTracer, DeserializingRequestTracingFilterProvider deserializingRequestTracer, DeserializedRequestTracingFilterProvider deserializedRequestTracer ) { return new RequestMessageSerializer( serializingRequestTracer == null ? new IFilterProvider<RequestMessageSerializationFilter>[] { serializingRequestTracer } : null, serializedRequestTracer == null ? new IFilterProvider<SerializedMessageFilter<MessageSerializationContext>>[] { serializedRequestTracer } : null, deserializingRequestTracer == null ? new IFilterProvider<SerializedMessageFilter<MessageDeserializationContext>>[] { deserializingRequestTracer } : null, deserializedRequestTracer == null ? new IFilterProvider<RequestMessageDeserializationFilter>[] { deserializedRequestTracer } : null, null ); }
public void TestDeserialize_Notification_Devided() { // TODO: Mock filters var objectTracingFilter = new DeserializedRequestTracingFilterProvider(); var binaryTracingFilter = new DeserializingRequestTracingFilterProvider(); var target = SerializerFactory.CreateRequestMessageSerializerWithTracer( null, null, binaryTracingFilter, objectTracingFilter ); try { var method = Guid.NewGuid().ToString(); var args = new object[] { 1, "String", null, true }; var expected = new MessagePackObject( new MessagePackObject[] { new MessagePackObject( ( int )MessageType.Notification ), new MessagePackObject( method ), new MessagePackObject[] { new MessagePackObject( 1 ), new MessagePackObject( "String" ), MessagePackObject.Nil, new MessagePackObject( true ) } } ); var stream = new MemoryStream(); Packer.Create( stream ).Pack( expected ); var serialized = stream.ToArray(); var packets = Segmentate( serialized, 10 ).ToArray(); int indexOfPackets = 0; using ( var underlying = ChunkBuffer.CreateDefault() ) { underlying.Feed( new ArraySegment<byte>( packets[ 0 ] ) ); using ( var buffer = new RpcInputBuffer<object, object>( underlying, ( _0, _1, _2 ) => ChunkBuffer.CreateDefault(), ( item, _0, _1 ) => { indexOfPackets++; if ( indexOfPackets >= packets.Length ) { Assert.Fail( "Over requesting." ); }; item.Reset(); item.Feed( new ArraySegment<byte>( packets[ indexOfPackets ] ) ); return new BufferFeeding( packets[ indexOfPackets ].Length ); }, null ) ) { RequestMessage actual; var result = target.Deserialize( buffer, out actual ); Assert.IsTrue( result.IsSuccess, result.ToString() ); Assert.AreEqual( MessageType.Notification, actual.MessageType ); Assert.AreEqual( method, actual.Method ); Assert.AreEqual( 1, actual.Arguments[ 0 ].AsInt32() ); Assert.AreEqual( "String", actual.Arguments[ 1 ].AsString() ); Assert.IsTrue( actual.Arguments[ 2 ].IsNil ); Assert.IsTrue( actual.Arguments[ 3 ].AsBoolean() ); } } } finally { Console.WriteLine( "BINARY TRACE:{0}", binaryTracingFilter.GetTrace() ); Console.WriteLine( "OBJECT TRACE:{0}", objectTracingFilter.GetTrace() ); } }
public void TestDeserialize_Request_Normal() { // TODO: Mock filters var objectTracingFilter = new DeserializedRequestTracingFilterProvider(); var binaryTracingFilter = new DeserializingRequestTracingFilterProvider(); var target = SerializerFactory.CreateRequestMessageSerializerWithTracer( null, null, binaryTracingFilter, objectTracingFilter ); try { var id = Environment.TickCount; var method = Guid.NewGuid().ToString(); var args = new object[] { 1, "String", null, true }; var expected = new MessagePackObject( new MessagePackObject[] { new MessagePackObject( ( int )MessageType.Request ), new MessagePackObject( ( uint )id ), new MessagePackObject( method ), new MessagePackObject[] { new MessagePackObject( 1 ), new MessagePackObject( "String" ), MessagePackObject.Nil, new MessagePackObject( true ) } } ); var stream = new MemoryStream(); Packer.Create( stream ).Pack( expected ); var serialized = stream.ToArray(); using ( var underlying = ChunkBuffer.CreateDefault() ) { underlying.Feed( new ArraySegment<byte>( serialized ) ); using ( var buffer = new RpcInputBuffer<object, object>( underlying, ReallocationNotRequired, FeedingNotRequired, null ) ) { RequestMessage actual; var result = target.Deserialize( buffer, out actual ); Assert.IsTrue( result.IsSuccess, result.ToString() ); Assert.AreEqual( MessageType.Request, actual.MessageType ); Assert.AreEqual( id, actual.MessageId ); Assert.AreEqual( method, actual.Method ); Assert.AreEqual( 1, actual.Arguments[ 0 ].AsInt32() ); Assert.AreEqual( "String", actual.Arguments[ 1 ].AsString() ); Assert.IsTrue( actual.Arguments[ 2 ].IsNil ); Assert.IsTrue( actual.Arguments[ 3 ].AsBoolean() ); } } } finally { Console.WriteLine( "BINARY TRACE:{0}", binaryTracingFilter.GetTrace() ); Console.WriteLine( "OBJECT TRACE:{0}", objectTracingFilter.GetTrace() ); } }