コード例 #1
0
ファイル: TcpSession.cs プロジェクト: EmeraldDream/ProjectR
        public void Tick()
        {
            FileDataBuff buff = PopRecvData();

            while (buff != null)
            {
                if (!Invoke(buff))
                {
                    LogManager.Debug("TcpSession::Tick => invoke error");
                    Stop();
                    return;
                }
                buff.Clear();
                buff = PopRecvData();
            }
        }
コード例 #2
0
ファイル: TcpSession.cs プロジェクト: EmeraldDream/ProjectR
        protected bool Invoke(FileDataBuff buff)
        {
            if (buff == null || _rpcCallbackArray == null)
            {
                return(false);
            }

            if (buff._dataLen < 4)
            {
                return(false);
            }

            uint readLen = 0;
            uint msgType = 0;
            uint msgLen  = 0;

            byte[] ushortBytes = new byte[2];

            readLen = 2;
            SerializeUtil.LEMemcpy(ushortBytes, 0, buff._data, buff.GetReadPos(), readLen);
            buff._readPos += readLen;
            msgType        = BitConverter.ToUInt16(ushortBytes, 0);

            if (msgType >= _rpcCallbackNum)
            {
                return(false);
            }

            readLen = 2;
            SerializeUtil.LEMemcpy(ushortBytes, 0, buff._data, buff.GetReadPos(), readLen);
            buff._readPos += readLen;
            msgLen         = BitConverter.ToUInt16(ushortBytes, 0);

            if (buff.GetUnreadLen() != msgLen)
            {
                return(false);
            }

            return(_rpcCallbackArray[msgType](buff._data, buff.GetReadPos(), msgLen));
        }