コード例 #1
0
        public void Tick()
        {
            // 连接事件
            if (m_ConnectEvent != null)
            {
                var isSucceed = m_ConnectEvent.isSucceed;
                onConnect.Invoke(isSucceed);
                m_ConnectEvent = null;
            }

            // 接收事件
            ByteArray data = m_ReadBuffer.GetData();

            while (data != null)
            {
                onReceive.Invoke(data.ToBytes());
                data = m_ReadBuffer.GetData();
            }

            // 远程强制关闭事件
            if (m_ForceCloseEvent != null)
            {
                onForceClose.Invoke();
                m_ForceCloseEvent = null;
            }
        }
コード例 #2
0
 private void ReceiveCallback(IAsyncResult ar)
 {
     try
     {
         Socket socket = (Socket)ar.AsyncState;
         if (socket != null && !socket.Connected)
         {
             return;                                      // close 之后会中止 recv 线程,有可能会调用该 callback。
         }
         int count = socket.EndReceive(ar);
         m_ReadBuffer.Update(count);
         socket.BeginReceive(m_ReadBuffer.recvBuffer, ReceiveCallback, socket);
     }
     catch (SocketException)
     {
         m_ForceCloseEvent = new ForceCloseEvent();
     }
 }