private void putResponse(TcpClient client, MemoryStream ms, ResponseMsg response, SlimSerializer serializer) { var frameBegin = Consts.PACKET_DELIMITER_LENGTH; ms.Position = frameBegin; var frame = new WireFrame(WireFrame.SLIM_FORMAT, true, response.RequestID); // Write the frame var frameSize = frame.Serialize(ms); // Write the message serializer.Serialize(ms, response); var size = (int)ms.Position - frameBegin; var buffer = ms.GetBuffer(); //no stream expansion beyond this point buffer.WriteBEInt32(0, size); Binding.DumpMsg(true, response, buffer, 0, (int)ms.Position); if (size > Binding.MaxMsgSize) { Instrumentation.ServerSerializedOverMaxMsgSizeErrorEvent.Happened(Node); throw new MessageSizeException(size, Binding.MaxMsgSize, "putResponse()", serializer.BatchTypesAdded); } client.GetStream().Write(buffer, 0, (int)ms.Position); stat_MsgSent(); stat_BytesSent(size); }
private int serialize(MemChunk chunk, WireFrame frame, Msg msg) { chunk.Position = sizeof(int); frame.Serialize(chunk); Binding.Serializer.Serialize(chunk, msg); var size = (int)chunk.Position; //includes 4 byte len prefix var buff = chunk.GetBuffer(); //no stream expansion beyond this point buff.WriteBEInt32(0, size); return(size); }
private void putRequest(RequestMsg request) { var ms = m_MemStream; var dataBegin = Consts.PACKET_DELIMITER_LENGTH; ms.Position = dataBegin; var frame = new WireFrame(WireFrame.SLIM_FORMAT, request.OneWay, request.RequestID); // Write the frame var frameSize = frame.Serialize(ms); // Write the message m_Serializer.Serialize(ms, request); var size = (int)ms.Position - dataBegin; var buffer = ms.GetBuffer(); //no stream expansion beyond this point buffer.WriteBEInt32(0, size); Binding.DumpMsg(false, request, buffer, 0, (int)ms.Position); if (size > Binding.MaxMsgSize) { Instrumentation.ClientSerializedOverMaxMsgSizeErrorEvent.Happened(Node); //do not tear the socket, however we may have added extra types to Serializer typereg that server never received //so in thatcase we do close the channel throw new MessageSizeException(size, Binding.MaxMsgSize, "putRequest(" + request.RequestID + ")", m_Serializer.BatchTypesAdded); } m_Client.GetStream().Write(buffer, 0, (int)ms.Position); stat_MsgSent(); stat_BytesSent(size); }
public void EchoResponse_SerializeDeserialize() { var frm1 = new WireFrame(FrameType.EchoResponse, 123, false, FID.Generate()); Assert.IsTrue( frm1.OneWay ); Assert.AreEqual( WireFrame.FRAME_LENGTH, frm1.Length ); var ms = new MemoryStream(); Assert.AreEqual(WireFrame.FRAME_LENGTH, frm1.Serialize(ms)); ms.Position = 0; var frm2 = new WireFrame(ms); Assert.AreEqual( frm1.Type, frm2.Type ); Assert.AreEqual( frm1.RequestID, frm2.RequestID ); Assert.AreEqual( frm1.OneWay, frm2.OneWay ); Assert.AreEqual( frm1.Length, frm2.Length ); Assert.AreEqual( frm1.Format, frm2.Format ); Assert.AreEqual( frm1.HeadersContent, frm2.HeadersContent ); Assert.IsTrue( frm2.OneWay ); }
public void Glue_SerializeDeserialize_WithHeadersWithLatinText() { var hdr = "<a><remote name='zzz'/></a>";//Latin only chars var frm1 = new WireFrame(123, false, FID.Generate(), hdr); var utfLen = WireFrame.HEADERS_ENCODING.GetByteCount( hdr ); Assert.IsTrue( utfLen == hdr.Length); Assert.AreEqual( WireFrame.FRAME_LENGTH + hdr.Length, frm1.Length ); var ms = new MemoryStream(); Assert.AreEqual(WireFrame.FRAME_LENGTH + hdr.Length, frm1.Serialize(ms)); ms.Position = 0; var frm2 = new WireFrame(ms); Assert.AreEqual( frm1.Type, frm2.Type ); Assert.AreEqual( frm1.RequestID, frm2.RequestID ); Assert.AreEqual( frm1.OneWay, frm2.OneWay ); Assert.AreEqual( frm1.Length, frm2.Length ); Assert.AreEqual( frm1.Format, frm2.Format ); Assert.AreEqual( frm1.HeadersContent, frm2.HeadersContent ); Assert.IsFalse( frm2.OneWay ); Assert.AreEqual( "zzz", frm2.Headers["remote"].AttrByName("name").Value); }
public void Glue_SerializeDeserialize_WithHeadersWithChineseText() { var hdr = "<a><remote name='久有归天愿'/></a>"; var frm1 = new WireFrame(123, false, FID.Generate(), hdr); var utfLen = WireFrame.HEADERS_ENCODING.GetByteCount( hdr ); Assert.IsTrue( utfLen > hdr.Length); Console.WriteLine("{0} has {1} byte len and {2} char len".Args(hdr, utfLen, hdr.Length) ); Assert.AreEqual( WireFrame.FRAME_LENGTH + utfLen, frm1.Length ); var ms = new MemoryStream(); Assert.AreEqual(WireFrame.FRAME_LENGTH + utfLen, frm1.Serialize(ms)); ms.Position = 0; var frm2 = new WireFrame(ms); Assert.AreEqual( frm1.Type, frm2.Type ); Assert.AreEqual( frm1.RequestID, frm2.RequestID ); Assert.AreEqual( frm1.OneWay, frm2.OneWay ); Assert.AreEqual( frm1.Length, frm2.Length ); Assert.AreEqual( frm1.Format, frm2.Format ); Assert.AreEqual( frm1.HeadersContent, frm2.HeadersContent ); Assert.IsFalse( frm2.OneWay ); Assert.AreEqual( "久有归天愿", frm2.Headers["remote"].AttrByName("name").Value); }