void process_recv_queue() { mRecvQueue.Switch(); bool bHadRecv = !mRecvQueue.Empty(); while (!mRecvQueue.Empty()) { var buf = mRecvQueue.Pop(); mNeedUpdateFlag = true; //跳过心跳包 if (buf.Length <= 4) { if (buf.Length == 4) { UInt32 errorCode = BitConverter.ToUInt32(buf, 0); if (m_nDisconnectError == errorCode) { UnityEngine.Debug.LogWarning("recive disconnect data...."); if (m_socketSink != null) { mConnectSucceed = false; m_socketSink.OnConnectError(m_nSocketID, SOCKET_ERROR.SOCKET_ERROR_SERVER_HANDSHAKE_DISCONNECT); } return; } } continue; } mKcp.Input(buf); for (var size = mKcp.PeekSize(); size > 0; size = mKcp.PeekSize()) { int nRecvSize = mKcp.Recv(recievebuffer); if (nRecvSize > 0) { if (m_socketSink != null) { m_socketSink.OnReceive(m_nSocketID, recievebuffer, 0, nRecvSize); } } } } //更新接收时间 if (bHadRecv) { mLastReceiveTime = iclock(); //推进一下发心跳包的时间 mLasRecieveFrame = mCurFrame; } }
private void Connected(IAsyncResult iar) { try { lock (m_QueueToSend.SyncRoot) { m_QueueToSend.Clear(); } m_Connection.EndConnect(iar); m_ThreadReceive = new Thread(new ThreadStart(ThreadReceive)); m_ThreadSend = new Thread(new ThreadStart(ThreadSend)); m_bRunReceive = true; m_bRunSend = true; m_ThreadReceive.Start(); m_ThreadSend.Start(); if (m_socketSink != null) { m_socketSink.OnConnect(m_nSocketID); //ConnectionCreated(this, new EventArgs()); } } catch (SocketException) { if (m_socketSink != null) { m_socketSink.OnConnectError(m_nSocketID, SOCKET_ERROR.SOCKET_ERROR_CONNECT_FAIL); } } }