Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
 /// <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();
 }
Beispiel #3
0
        /// <summary>
        /// 根据表结构创建数据表
        /// </summary>
        /// <param name="sr">反序列化工具</param>
        /// <returns></returns>
        void BuildFieldDict(Serialization.SerializationReader sr, Dictionary <string, int> dataFields)
        {
            dataFields.Clear();
            string colName, colType, tableName = "";

            string[] arySchema;
            int      rowsCount = sr.ReadOptimizedInt32();
            int      colsCount = 0;
            Dictionary <string, int> listColumn = new Dictionary <string, int>(rowsCount);

            for (int i = 0; i < rowsCount; i++)
            {
                arySchema = sr.ReadOptimizedStringArray();
                tableName = arySchema[0];
                colName   = arySchema[1];
                colType   = arySchema[2];

                if (!listColumn.TryGetValue(colName, out colsCount))
                {
                    listColumn.Add(colName, 1);
                }
                else
                {
                    listColumn[colName] = colsCount + 1;
                    colName             = colName + "_" + colsCount.ToString();
                }

                dataFields.Add(colName, i);
            }
            listColumn.Clear();
            listColumn = null;
        }
Beispiel #4
0
 /// <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));
     }
 }
Beispiel #5
0
        /// <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();
            }
        }
Beispiel #6
0
        /// <summary>
        /// 将byte[]反序列化DataTable
        /// </summary>
        /// <param name="ListData"></param>
        /// <returns></returns>
        public List <T> Deserialize <T>(byte[] ListData) where T : DataObject, new()
        {
            if (ListData == null)
            {
                return(null);
            }
            List <T> DataList = new List <T>();

            using (Serialization.SerializationReader sr = new Serialization.SerializationReader(ListData))
            {
                Dictionary <string, int> Fields = new Dictionary <string, int>();
                BuildFieldDict(sr, Fields);
                while (sr.BytesRemaining != 0)
                {
                    T dataObject = new T();
                    dataObject.Fields = Fields;
                    dataObject.Data   = sr.ReadOptimizedObjectArray();
                    DataList.Add(dataObject);
                }
            }
            return(DataList);
        }
Beispiel #7
0
        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);
                }
            }
        }
Beispiel #8
0
 /// <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();
 }
Beispiel #9
0
 /// <summary>
 /// 反序列化数据
 /// </summary>
 /// <param name="reader"></param>
 /// <param name="context"></param>
 public override void DeserializeOwnedData(Serialization.SerializationReader reader, object context)
 {
     base.DeserializeOwnedData(reader, context);
     MessageData = reader.ReadByteArray();
 }
Beispiel #10
0
 /// <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();
 }