private void ReceiveCallback(IAsyncResult ar) { // if ( ar.IsCompleted ) // { try { NetReadBuffer buffer = m_Readbuffer; int nReadDataLen = m_CliSocket.EndReceive(ar); if (nReadDataLen == 0) { ReinitSocket(); PostDisconnectMsg(); } else { buffer.setMaxDataPostion(buffer.getMaxDataPostion() + nReadDataLen); DecodeMsg_Cumulative(); m_Readbuffer.Settle(); BeginRecv(); } } catch (Exception e) { //Debug.LogError( "Recieve callback exception " + e.ToString() ); Debug.LogException(e); ReinitSocket(); PostDisconnectMsg(); } // } }
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); }