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