private bool ProcessPacket() { lock (m_HeartBeatState) { m_HeartBeatState.Reset(m_ResetHeartBeatElapseSecondsWhenReceivePacket); } try { object customErrorData = null; Packet packet = m_NetworkChannelHelper.DeserializePacket(m_ReceiveState.Stream, out customErrorData); if (customErrorData != null) { if (NetworkChannelCustomError != null) { NetworkChannelCustomError(this, customErrorData); } } if (packet != null) { m_EventPool.Fire(this, packet); } m_ReceiveState.PrepareForPacketHeader(m_NetworkChannelHelper.PacketHeaderLength); } catch (System.Exception exception) { m_Active = false; if (NetworkChannelError != null) { NetworkChannelError(this, NetworkErrorCode.DeserializePacketError, exception.ToString()); return(false); } throw; } return(true); }
protected virtual bool ProcessPacket() { lock (m_HeartBeatState) { m_HeartBeatState.Reset(m_ResetHeartBeatElapseSecondsWhenReceivePacket); } try { object customErrorData = null; Packet packet = m_NetworkChannelHelper.DeserializePacket(m_ReceiveState.PacketHeader, m_ReceiveState.Stream, out customErrorData); if (customErrorData != null && NetworkChannelCustomError != null) { NetworkChannelCustomError(this, customErrorData); } if (packet != null) { m_ReceivePacketPool.Fire(this, packet); } m_ReceiveState.PrepareForPacketHeader(m_NetworkChannelHelper.PacketHeaderLength); } catch (Exception exception) { m_Active = false; if (NetworkChannelError != null) { SocketException socketException = exception as SocketException; NetworkChannelError(this, NetworkErrorCode.DeserializePacketError, socketException != null ? socketException.SocketErrorCode : SocketError.Success, exception.ToString()); return(false); } throw; } return(true); }
/// <summary> /// 抛出事件,这个操作是线程安全的,即使不在主线程中抛出,也可保证在主线程中回调事件处理函数,但事件会在抛出后的下一帧分发。 /// </summary> /// <param name="sender">事件源。</param> /// <param name="e">事件参数。</param> public void Fire(object sender, CGEventArgs e) { m_EventPool.Fire(sender, e); }
private void OnNetworkChannelReceived(NetworkChannel networkChannel, Packet packet) { m_EventPool.Fire(networkChannel, packet); }