Exemple #1
0
        private void HandleRecvQueue()
        {
            m_RecvQueue.Switch();
            while (!m_RecvQueue.Empty())
            {
                var recvBufferRaw = m_RecvQueue.Pop();
                int ret           = m_Kcp.Input(recvBufferRaw);

                //收到的不是一个正确的KCP包
                if (ret < 0)
                {
                    if (m_Listener != null)
                    {
                        m_Listener(recvBufferRaw, recvBufferRaw.Length, m_RemotePoint);
                    }
                    return;
                }

                m_NeedKcpUpdateFlag = true;

                for (int size = m_Kcp.PeekSize(); size > 0; size = m_Kcp.PeekSize())
                {
                    var recvBuffer = new byte[size];
                    if (m_Kcp.Recv(recvBuffer) > 0)
                    {
                        if (m_Listener != null)
                        {
                            m_Listener(recvBuffer, size, m_RemotePoint);
                        }
                    }
                }
            }
        }