コード例 #1
0
        // 初始化
        public bool Init(HandleNetMessage msgHandler)
        {
            if (msgHandler == null)
            {
                return(false);
            }

            netMsgHandle = msgHandler;

            if (!InitWriteReadList(this.HandleMsgBuffer, this.FreeMsgBuffer))
            {
                return(false);
            }

            MsgBuffer msgBuffer = MsgBufferPool.GetInstance().MallocMsgBuffer();

            if (msgBuffer == null)
            {
                ReleaseWriteReadList();
                return(false);
            }

            AddElement(msgBuffer);

            return(true);
        }
コード例 #2
0
 // MsgBuffer释放函数
 public void FreeMsgBuffer(MsgBuffer msgBuffer)
 {
     if (msgBuffer != null)
     {
         MsgBufferPool.GetInstance().FreeMsgBuffer(msgBuffer);
     }
 }
コード例 #3
0
        // 添加网络消息
        public void PushNetMessage(UInt16 msgCommand, byte[] dataBuffer, Int32 bufferOffset, Int32 dataLength, INetSession netSession)
        {
            if (dataBuffer == null || netSession == null || dataLength <= 0)
            {
                Trace.Assert(dataBuffer != null && netSession != null && dataLength > 0, "PushNetMessage input param error");
                return;
            }

            bool bAddToWriteList = false;

            lock (visitorGuard)
            {
                MsgBuffer msgBuffer = GetLastWriteElement();
                if (msgBuffer == null || msgBuffer.GetFreeLength() < dataLength)
                {
                    bAddToWriteList = true;
                    msgBuffer       = MsgBufferPool.GetInstance().MallocMsgBuffer();
                    if (msgBuffer == null)
                    {
                        Trace.Assert(false, "MallocMsgBuffer is null");
                        return;
                    }
                }

                if (!msgBuffer.PushNetMessage(msgCommand, dataBuffer, bufferOffset, dataLength, netSession))
                {
                    if (bAddToWriteList)
                    {
                        MsgBufferPool.GetInstance().FreeMsgBuffer(msgBuffer);
                    }

                    return;
                }

                if (bAddToWriteList)
                {
                    AddElement(msgBuffer);
                }
            }
        }