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; } }
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(); } }