Example #1
0
        internal static IList serializeMessage(Message msg)
        {
            int len = 0;

            byte[]    buffie;
            FlagsByte flags = new FlagsByte();

            msg.Dest  = null;
            msg.Dests = null;

            RequestCorrelatorHDR rqHeader = (RequestCorrelatorHDR)msg.getHeader(HeaderType.REQUEST_COORELATOR);

            if (rqHeader != null)
            {
                rqHeader.serializeFlag = false;
            }

            ClusteredMemoryStream stmOut = new ClusteredMemoryStream();

            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);

            return(stmOut.GetInternalBuffer());
        }
Example #2
0
        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;
        }
Example #3
0
        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;
        }