internal static byte[] serializeMessage(Message msg) { int len = 0; byte[] buffie; FlagsByte flags = new FlagsByte(); msg.Dest = null; msg.Dests = null; RequestCorrelator.HDR rqHeader = (RequestCorrelator.HDR)msg.getHeader(HeaderType.REQUEST_COORELATOR); if (rqHeader != null) { rqHeader.serializeFlag = false; } Stream stmOut = new MemoryStream(); stmOut.Write(Util.WriteInt32(len), 0, 4); stmOut.Write(Util.WriteInt32(len), 0, 4); if (msg.IsUserMsg) { BinaryWriter msgWriter = new BinaryWriter(stmOut, new UTF8Encoding(true)); flags.SetOn(FlagsByte.Flag.TRANS); msgWriter.Write(flags.DataByte); msg.SerializeLocal(msgWriter); } else { flags.SetOff(FlagsByte.Flag.TRANS); stmOut.WriteByte(flags.DataByte); CompactBinaryFormatter.Serialize(stmOut, msg, null, false); } len = (int)stmOut.Position - 4; int payloadLength = 0; // the user payload size. payload is passed on untill finally send on the socket. if (msg.Payload != null) { for (int i = 0; i < msg.Payload.Length; i++) { payloadLength += ((byte[])msg.Payload.GetValue(i)).Length; } len += payloadLength; } stmOut.Position = 0; stmOut.Write(Util.WriteInt32(len), 0, 4); stmOut.Write(Util.WriteInt32(len - 4 - payloadLength), 0, 4); stmOut.Position = 0; buffie = new byte[len + 4 - payloadLength]; stmOut.Read(buffie, 0, len + 4 - payloadLength); stmOut.Position = 0; return(buffie); }
public void SerializeLocal(BinaryWriter writer) { //Check in sequence of headers.. FlagsByte bFlags = new FlagsByte(); if (IsUserMsg) { bFlags.SetOn(FlagsByte.Flag.TRANS); } object tmpHdr; tmpHdr = (Header)headers[(object)(HeaderType.REQUEST_COORELATOR)]; if (tmpHdr != null) { RequestCorrelator.HDR corHdr = (RequestCorrelator.HDR)tmpHdr; corHdr.SerializeLocal(writer); bFlags.SetOn(FlagsByte.Flag.COR); } tmpHdr = (Header)headers[(object)(HeaderType.TOTAL)]; if (tmpHdr != null) { TOTAL.HDR totalHdr = (TOTAL.HDR)tmpHdr; totalHdr.SerializeLocal(writer); bFlags.SetOn(FlagsByte.Flag.TOTAL); } tmpHdr = (Header)headers[(object)(HeaderType.TCP)]; if (tmpHdr != null) { TcpHeader tcpHdr = (TcpHeader)tmpHdr; tcpHdr.SerializeLocal(writer); bFlags.SetOn(FlagsByte.Flag.TCP); } writer.Write(Convert.ToInt16(prio)); writer.Write(handledAsynchronously); writer.Write(arrivalTime.Ticks); writer.Write(sendTime.Ticks); writer.Write(responseExpected); writer.Write(_type); if (stream != null) { writer.Write(length); writer.Write(((MemoryStream)stream).GetBuffer(), 0, length); } else { int length = buf.Length; writer.Write(length); writer.Write(buf); } long curPos = writer.BaseStream.Position; writer.BaseStream.Position = 8; //afte 4 bytes of total size and 4 bytes of message size ..here comes the flag. writer.Write(bFlags.DataByte); writer.BaseStream.Position = curPos; }
public void DeserializeLocal(BinaryReader reader) { isUserMsg = true; reader.BaseStream.Position = 0; byte flags = reader.ReadByte(); FlagsByte bFlags = new FlagsByte(); bFlags.DataByte = flags; //Headers are in sequence 1. COR 2. TOTAL 3. TCP headers = new Hashtable(); if (bFlags.AnyOn(FlagsByte.Flag.COR)) { RequestCorrelator.HDR corHdr = new RequestCorrelator.HDR(); corHdr.DeserializeLocal(reader); headers.Add(HeaderType.REQUEST_COORELATOR, corHdr); } if (bFlags.AnyOn(FlagsByte.Flag.TOTAL)) { TOTAL.HDR totalHdr = new TOTAL.HDR(); totalHdr.DeserializeLocal(reader); headers.Add(HeaderType.TOTAL, totalHdr); } if (bFlags.AnyOn(FlagsByte.Flag.TCP)) { TcpHeader tcpHdr = new TcpHeader(); tcpHdr.DeserializeLocal(reader); headers.Add(HeaderType.TCP, tcpHdr); } prio = (Priority)Enum.ToObject(typeof(Priority), reader.ReadInt16()); handledAsynchronously = reader.ReadBoolean(); long ticks = reader.ReadInt64(); arrivalTime = new DateTime(ticks); ticks = reader.ReadInt64(); sendTime = new DateTime(ticks); responseExpected = reader.ReadBoolean(); _type = reader.ReadByte(); length = reader.ReadInt32(); buf = (byte[])reader.ReadBytes(length); }
public void SerializeLocal(BinaryWriter writer) { //Check in sequence of headers.. FlagsByte bFlags = new FlagsByte(); if (IsUserMsg) { bFlags.SetOn(FlagsByte.Flag.TRANS); } object tmpHdr; tmpHdr = (Header)headers[(object)(HeaderType.REQUEST_COORELATOR)]; if (tmpHdr != null) { RequestCorrelatorHDR corHdr = (RequestCorrelatorHDR)tmpHdr; corHdr.SerializeLocal(writer); bFlags.SetOn(FlagsByte.Flag.COR); } tmpHdr = (Header)headers[(object)(HeaderType.TOTAL)]; if (tmpHdr != null) { HDR totalHdr = (HDR)tmpHdr; totalHdr.SerializeLocal(writer); bFlags.SetOn(FlagsByte.Flag.TOTAL); } tmpHdr = (Header)headers[(object)(HeaderType.TCP)]; if (tmpHdr != null) { TcpHeader tcpHdr = (TcpHeader)tmpHdr; tcpHdr.SerializeLocal(writer); bFlags.SetOn(FlagsByte.Flag.TCP); } writer.Write(Convert.ToInt16(prio)); writer.Write(handledAsynchronously); writer.Write(arrivalTime.Ticks); writer.Write(sendTime.Ticks); writer.Write(responseExpected); writer.Write(_type); if (stream != null) { writer.Write(true); writer.Write(length); writer.Write(((MemoryStream)stream).GetBuffer(), 0, length); } else { writer.Write(buf != null); int length = buf != null ? buf.Length: 0; writer.Write(length); if (buf != null) { writer.Write(buf); } } writer.Write(Buffers != null); int bufferCount = Buffers != null ? Buffers.Count : 0; writer.Write(bufferCount); if (Buffers != null) { foreach (byte[] buff in Buffers) { writer.Write(buff.Length); writer.Write(buff, 0, buff.Length); } } //bool st = _stackTrace != null; //writer.Write(st); //if(st) // CompactBinaryFormatter.Serialize(writer.BaseStream, _stackTrace, null,false); //st = _stackTrace2 != null; //writer.Write(st); //if (st) // CompactBinaryFormatter.Serialize(writer.BaseStream, _stackTrace2, null, false); long curPos = writer.BaseStream.Position; writer.BaseStream.Position = 8; //afte 4 bytes of total size and 4 bytes of message size ..here comes the flag. writer.Write(bFlags.DataByte); writer.BaseStream.Position = curPos; }
public void DeserializeLocal(BinaryReader reader) { isUserMsg = true; reader.BaseStream.Position -= 1; byte flags = reader.ReadByte(); FlagsByte bFlags = new FlagsByte(); bFlags.DataByte = flags; //Headers are in sequence 1. COR 2. TOTAL 3. TCP headers = new Hashtable(); if (bFlags.AnyOn(FlagsByte.Flag.COR)) { RequestCorrelatorHDR corHdr = new RequestCorrelatorHDR(); corHdr.DeserializeLocal(reader); headers.Add(HeaderType.REQUEST_COORELATOR, corHdr); } if (bFlags.AnyOn(FlagsByte.Flag.TOTAL)) { HDR totalHdr = new HDR(); totalHdr.DeserializeLocal(reader); headers.Add(HeaderType.TOTAL, totalHdr); } if (bFlags.AnyOn(FlagsByte.Flag.TCP)) { TcpHeader tcpHdr = new TcpHeader(); tcpHdr.DeserializeLocal(reader); headers.Add(HeaderType.TCP, tcpHdr); } prio = (Priority)Enum.ToObject(typeof(Priority), reader.ReadInt16()); handledAsynchronously = reader.ReadBoolean(); long ticks = reader.ReadInt64(); arrivalTime = new DateTime(ticks); ticks = reader.ReadInt64(); sendTime = new DateTime(ticks); responseExpected = reader.ReadBoolean(); _type = reader.ReadByte(); //bool st = reader.ReadBoolean(); //if(st) // _stackTrace = CompactBinaryFormatter.Deserialize(reader.BaseStream, null,false) as Hashtable; //st = reader.ReadBoolean(); //if (st) // _stackTrace2 = CompactBinaryFormatter.Deserialize(reader.BaseStream, null, false) as Hashtable; //Console.WriteLine("4: " + TimeStats.FormatNOW()); bool bufferNotNull = reader.ReadBoolean(); length = reader.ReadInt32(); if (bufferNotNull) { buf = (byte[])reader.ReadBytes(length); } bool bufferListNotNull = reader.ReadBoolean(); int bufferCount = reader.ReadInt32(); if (bufferListNotNull) { buffers = new ClusteredArrayList(bufferCount); for (int i = 0; i < bufferCount; i++) { buffers.Add(reader.ReadBytes(reader.ReadInt32())); } } //Console.WriteLine("5: " + TimeStats.FormatNOW()); //length = (buf != null) ? buf.Length : 0; }