/// <summary> /// 反序列化数据 /// </summary> /// <param name="reader"></param> /// <param name="context"></param> public override void DeserializeOwnedData(Serialization.SerializationReader reader, object context) { base.DeserializeOwnedData(reader, context); ServiceClassName = reader.ReadOptimizedString(); MethodName = reader.ReadOptimizedString(); Parameters = reader.ReadOptimizedObjectArray(); }
/// <summary> /// 反序列化数据 /// </summary> /// <param name="reader"></param> /// <param name="context"></param> public override void DeserializeOwnedData(Serialization.SerializationReader reader, object context) { base.DeserializeOwnedData(reader, context); ReturnValue = reader.ReadObject(); bool hasException = reader.ReadBoolean(); if (hasException) { RemoteException = new CJiaRemoteException(reader.ReadOptimizedString()); RemoteException.Source = reader.ReadOptimizedString(); } }
/// <summary> /// This method is used to deserialize a IScsMessage from it's bytes. /// This method can be overrided by derived classes to change deserialization strategy. /// It is a couple with SerializeMessage method and must be overrided together. /// </summary> /// <param name="bytes"> /// Bytes of message to be deserialized (does not include message length. It consist /// of a single whole message) /// </param> /// <returns>Deserialized message</returns> protected virtual ICJiaMessage DeserializeMessage(byte[] bytes) { using (Net.Serialization.SerializationReader sr = new Serialization.SerializationReader(bytes)) { string msgTypeName = sr.ReadOptimizedString(); ICJiaMessage iMsg; switch (msgTypeName) { case "CJiaMessage": iMsg = new Communication.Messages.CJiaMessage(); break; case "CJiaPingMessage": iMsg = new Communication.Messages.CJiaPingMessage(); break; case "CJiaRawDataMessage": iMsg = new Communication.Messages.CJiaRawDataMessage(); break; case "CJiaTextMessage": iMsg = new Communication.Messages.CJiaTextMessage(); break; case "CJiaRemoteInvokeMessage": iMsg = new Communication.Messages.CJiaRemoteInvokeMessage(); break; case "CJiaRemoteInvokeReturnMessage": iMsg = new Communication.Messages.CJiaRemoteInvokeReturnMessage(); break; default: throw new Exception("消息类型错误,必须继承ICJiaMessage"); } if (iMsg != null) { iMsg.DeserializeOwnedData(sr, null); } return(iMsg); } }
/// <summary> /// 自定义反序列化消息 /// </summary> /// <param name="bytes"></param> /// <returns></returns> protected override ICJiaMessage DeserializeMessage(byte[] bytes) { //Decode UTF8 encoded text and create a ScsTextMessage object using (Serialization.SerializationReader sr = new Serialization.SerializationReader(bytes)) { string msg = sr.ReadOptimizedString(); return(new CJiaTextMessage(msg)); //return new CJiaTextMessage(Encoding.UTF8.GetString(bytes)); } }
async static Task <Messages.CJiaRemoteInvokeReturnMessage> WaitResponseMessage() { while (true) { // 读取4字节的消息头 uint sizeFieldCount = await Reader.LoadAsync(MsgHeaderLength); if (sizeFieldCount != MsgHeaderLength) {//读取所有数据前连接关闭了 CloseConnection(); throw new Exception("连接中断,等待返回数据异常"); } // Read the string. uint stringLength = Reader.ReadUInt32(); uint actualStringLength = await Reader.LoadAsync(stringLength); if (stringLength != actualStringLength) { //读取所有数据前连接关闭了 return(null); } byte[] dataMsg = new byte[actualStringLength]; Reader.ReadBytes(dataMsg); using (Serialization.SerializationReader sr = new Serialization.SerializationReader(dataMsg)) { string msgTypeName = sr.ReadOptimizedString(); if (msgTypeName != "CJiaRemoteInvokeReturnMessage") { throw new Exception("返回消息类型异常。"); } Messages.CJiaRemoteInvokeReturnMessage ivkMsg = new Messages.CJiaRemoteInvokeReturnMessage(); ivkMsg.DeserializeOwnedData(sr, null); return(ivkMsg); } } }
/// <summary> /// 反序列化消息体 /// </summary> /// <param name="reader"></param> /// <param name="context"></param> public virtual void DeserializeOwnedData(Serialization.SerializationReader reader, object context) { MessageId = reader.ReadOptimizedString(); RepliedMessageId = reader.ReadOptimizedString(); }
/// <summary> /// 反序列化数据 /// </summary> /// <param name="reader"></param> /// <param name="context"></param> public override void DeserializeOwnedData(Serialization.SerializationReader reader, object context) { base.DeserializeOwnedData(reader, context); Text = reader.ReadOptimizedString(); }