コード例 #1
0
ファイル: Packet.cs プロジェクト: mahongbo86/SmartRoute
        private void OnEncode(object data, IBinaryWriter writer)
        {
            Message msg = data as Message;

            if (msg != null)
            {
                msg.Track("message GetType");
                msg.DataType = TypeHandler.GetTypeName(msg.Data.GetType());
            }
            using (IWriteBlock msgsize = writer.Allocate4Bytes())
            {
                int length = (int)writer.Length;
                TypeHandler.WriteType(data, writer);
                using (IWriteBlock bodysize = writer.Allocate4Bytes())
                {
                    int bodyStartlegnth = (int)writer.Length;
                    ProtoBuf.Meta.RuntimeTypeModel.Default.Serialize(writer.Stream, data);
                    bodysize.SetData((int)writer.Length - bodyStartlegnth);
                }
                if (msg != null)
                {
                    msg.Track("message write body");
                    using (IWriteBlock datasize = writer.Allocate4Bytes())
                    {
                        int dataStartlength = (int)writer.Length;
                        ProtoBuf.Meta.RuntimeTypeModel.Default.Serialize(writer.Stream, msg.Data);
                        datasize.SetData((int)writer.Length - dataStartlength);
                    }
                    msg.Track("message write body completed!");
                    msg.Track("message size:" + writer.Length);
                }
                msgsize.SetData((int)writer.Length - length);
            }
        }
コード例 #2
0
 private void OnEncode(object data, IBinaryWriter writer)
 {
     using (IWriteBlock msgsize = writer.Allocate4Bytes())
     {
         int length = (int)writer.Length;
         TypeHandler.WriteType(data, writer);
         using (IWriteBlock bodysize = writer.Allocate4Bytes())
         {
             int bodyStartlegnth = (int)writer.Length;
             writer.Write(Newtonsoft.Json.JsonConvert.SerializeObject(data));
             bodysize.SetData((int)writer.Length - bodyStartlegnth);
         }
         msgsize.SetData((int)writer.Length - length);
     }
 }
コード例 #3
0
ファイル: Packet.cs プロジェクト: yixiangling/SmartRoute
        private void OnEncode(object data, IBinaryWriter writer)
        {
            Message msg = data as Message;

            if (msg != null)
            {
                msg.Track("message GetType");
                msg.DataType = TypeHandler.GetMessageType(msg.Data.GetType()).TypeName;
            }
            using (IWriteBlock msgsize = writer.Allocate4Bytes())
            {
                int length = (int)writer.Length;
                TypeHandler.WriteType(data, writer);
                using (IWriteBlock bodysize = writer.Allocate4Bytes())
                {
                    int bodyStartlegnth = (int)writer.Length;
                    data.Serialize(writer.Stream);
                    bodysize.SetData((int)writer.Length - bodyStartlegnth);
                }
                if (msg != null)
                {
                    msg.Track("message write body");
                    using (IWriteBlock datasize = writer.Allocate4Bytes())
                    {
                        int    dataStartlength = (int)writer.Length;
                        object body            = msg.Data;
                        if (body is ISerializer)
                        {
                            ((ISerializer)body).Serialize(writer);
                        }
                        else
                        {
                            msg.Data.Serialize(writer.Stream);
                        }
                        datasize.SetData((int)writer.Length - dataStartlength);
                    }
                    msg.Track("message write body completed!");
                    msg.Track("message size:" + writer.Length);
                }
                msgsize.SetData((int)writer.Length - length);
            }
        }
コード例 #4
0
 public void Serialize(IBinaryWriter writer)
 {
     writer.WriteShortUTF(Name);
     writer.WriteShortUTF(Method);
     writer.Write((short)Parameters.Length);
     for (int i = 0; i < Parameters.Length; i++)
     {
         object data = Parameters[i];
         if (data == null)
         {
             writer.Write(0);
         }
         else
         {
             using (IWriteBlock block = writer.Allocate4Bytes())
             {
                 int start = (int)writer.Length;
                 data.Serialize(writer.Stream);
                 block.SetData((int)writer.Length - start);
             }
         }
     }
 }