Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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);
                }
            }
        }