public void TrySendMsg() { if (!m_bSending) { try { while (m_WriteMsgQueue.Count > 0) { INetWorkMessage gamemsg = m_WriteMsgQueue.Peek(); if (!gamemsg.encodeMessage(m_Writebuffer)) { break; } m_WriteMsgQueue.Dequeue(); } //writeDone.ReleaseMutex(); if (m_Writebuffer.getPostion() > 0) { m_bSending = true; m_CliSocket.BeginSend(m_Writebuffer.getWriteBuffer(), 0, m_Writebuffer.getPostion(), 0, new AsyncCallback(SendCallback), this); } } catch (Exception e) { //Debug.LogError( "Send exception " + e.ToString() ); Debug.LogException(e); m_bSending = false; } } }
public void doMyDecode(GameMsgType Type) { INetWorkMessage gamemsg = MsgFactory.CreateMsgByType(Type); if (gamemsg != null) { m_ReadMsgQueue.Enqueue(gamemsg); } }
public INetWorkMessage GetMessage() { mTempMsg = null; if (m_ReadMsgQueue.Count > 0) { mTempMsg = m_ReadMsgQueue.Dequeue(); } return(mTempMsg); }
private bool doDecode() { if (m_Readbuffer.remaining() > 1) { int pos = m_Readbuffer.getPostion(); int size = m_Readbuffer.GetUShort(); if (size >= 4 && size <= 65535) { if (size - 2 <= m_Readbuffer.remaining()) { GameMsgType Type = (GameMsgType)m_Readbuffer.GetUShort(); INetWorkMessage gamemsg = MsgFactory.CreateMsgByType(Type); if (gamemsg != null) { if (gamemsg.decodeMessage(m_Readbuffer)) { if (m_Readbuffer.getPostion() - pos != size) { Debug.LogError("handleXQMsg position error,Postion :" + m_Readbuffer.getPostion() + "," + pos + "," + size + ",ID:" + Type); m_Readbuffer.setMaxDataPostion(pos + size); m_Readbuffer.setPostion(pos + size); } else { m_ReadMsgQueue.Enqueue(gamemsg); } } else { Debug.LogError("Decode message failed, Type:" + Type + ",Size:" + size); //m_Readbuffer.Clear(); } } return(true); } else { m_Readbuffer.setPostion(pos); } } else { return(true); } } return(false); }