// 初始化 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); }
// MsgBuffer释放函数 public void FreeMsgBuffer(MsgBuffer msgBuffer) { if (msgBuffer != null) { MsgBufferPool.GetInstance().FreeMsgBuffer(msgBuffer); } }
// 添加网络消息 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); } } }