public void Decode <T>(IByteArrayReader reader, out object value) where T : new()
        {
            Int32 valueEx = 0;

            reader.ReadI32(ref valueEx);
            value = valueEx;
        }
        public void Decode <T>(IByteArrayReader reader, out object value) where T : new()
        {
            value = new T();
            MessageBase valueEx = value as MessageBase;

            if (valueEx == null)
            {
                throw new NullReferenceException("转换为空");
            }
            valueEx.UnPackMsg(reader);
        }
Esempio n. 3
0
        /// <summary>
        /// 处理消息
        /// 在socket线程处理
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="msgLen"></param>
        private void ProcessMsg(IByteArrayReader reader, int msgLen)
        {
            UInt16 msgId = 0;

            reader.ReadU16(ref msgId);
            if (msgId < 1)
            {
                mLogger.LogError("msgID = " + msgId + ", msgID < 1", "ProcessMsg");
                return;
            }

            if (MsgTransferLog)
            {
                mLogger.LogInfo("rev msg, msgId=" + GetMessageTypeString(msgId), "ProcessMsg");
            }

            IMessage msg = mMsgPool.GetMsgInst(msgId);

            if (msg == null)
            {
                mLogger.LogWarning("MsgPool is not find the msg, msgId = " + msgId, "ProcessMsg");
                return;
            }

            if (RecodeDump)
            {
                ActorCmd dumpCmd = new ActorCmd(NetworkOutCmd.Dump)
                {
                    Param0 = (uint)msgId,
                    Param1 = msgLen,
                    Param2 = reader.Dump(),
                };
                SendToOutput(dumpCmd);
            }

            try
            {
                msg.MergeFrom(reader.GetStream());
            }
            catch (Exception e)
            {
                mLogger.LogError("msgID = " + msgId + ", MergeFrom error, " + e.Message, "ProcessMsg");
                return;
            }

            SendToOutput(new ActorCmd(NetworkOutCmd.Message, msg));
        }
 /// <summary>
 /// 解消息包
 /// </summary>
 /// <param name="reader"></param>
 public virtual void UnPackMsg(IByteArrayReader reader)
 {
 }