void dispatchMsgs() { while (true) { int nReadSize = m_recvPool.ReadSize; int nReadPos = m_recvPool.ReadPos; // 消息没有包头大就推出循环 if (nReadSize < ConstDefine.NF_PACKET_HEAD_SIZE) { break; } int offset = 0; // 跳过包头标签定义 UInt16 nMsgID = BitConverter.ToUInt16(m_recvPool.Buffer, nReadPos + offset); offset += sizeof(UInt16); UInt32 length = BitConverter.ToUInt32(m_recvPool.Buffer, nReadPos + offset); offset += sizeof(UInt32); // 消息包还没有完全收完立即退出 length = ConvertUint32(length); nMsgID = ConvertUint16(nMsgID); Debug.LogFormat("RecvData {0} \t {1}", length, nMsgID); if (nReadSize < length) { break; } m_recvPool.ReadPos += (int)length; Debug.LogFormat("Recv:{0}", nMsgID); nReadPos += (int)ConstDefine.NF_PACKET_HEAD_SIZE; length -= ConstDefine.NF_PACKET_HEAD_SIZE; MemoryStream mem = new MemoryStream(m_recvPool.Buffer, nReadPos, (int)length); NetDispatcher.Instance().dispatchMessage(nMsgID, mem); if (m_curState != State.CONNECTED) { break; } } }
public void AddReceiveCallBack(Msg.EGameMsgID id, MessageDispatcher.MessageHandler netHandler) { NetDispatcher.Instance().AddReceiveCallBack((UInt16)id, netHandler); }