//发送一个数据包完毕 public void OnFinishSendData(QueueNode <IPackageData> node) { if (m_oSendRecycle.Size() < MAX_CACHE_SIZE) { PackageData packData = (PackageData)node.item; if (null != packData) { packData.Release(m_oRecieveMemPool); } m_oSendRecycle.Push(node); } else { node.item.Release(m_oRecieveMemPool); node.item = null; } }
public void SendMessage(byte serverID, UInt16 msgID, byte[] messageBuffer) { if (m_CurrentSocketClient != null) { QueueNode <IPackageData> node = m_oSendRecycle.Pop(); if (null == node) { node = new QueueNode <IPackageData>(); node.item = new PackageData(); } PackageData packdata = (PackageData)node.item; packdata.serverID = serverID; packdata.msgID = msgID; packdata.sendData = messageBuffer; m_CurrentSocketClient.Send(node); } }
protected void executePacket(IPackageData data)//UInt16 packetID, byte[] buffer, UInt16 bufferLen) { if (data.GetClassID() != m_nCurSocketID) { Debug.LogWarningFormat("executePacket: Ignore the old connection data"); return; } PackageData packdata = (PackageData)data; try { m_MessageEventHandler.OnHandler(packdata.serverID, packdata.msgID, packdata.recivedata.item.data, packdata.recivedata.item.data.Length); } catch (LuaException e) { Debug.LogError(e.Message); } }
void ProccessMessage() { // while (true) { //yield return new WaitForFixedUpdate(); //检查是否有连接错误 CheckConnectError(); if (m_CurrentSocketClient != null && m_MessageEventHandler != null) { recvMessageCount = 0; QueueNode <IPackageData> node = null; do { node = m_oRecieveQueue.Pop(); if (null != node) { executePacket(node.item); recvMessageCount++; if (m_oRecieveRecycle.Size() < MAX_CACHE_SIZE) { PackageData packData = (PackageData)node.item; if (null != packData) { // packData.m_senddata = null; packData.Release(m_oRecieveMemPool); } m_oRecieveRecycle.Push(node); } else { node.item.Release(m_oRecieveMemPool); node.item = null; } } } while (null != node); } } }