/// <summary> /// 获取网络频道。 /// </summary> /// <param name="name">网络频道名称。</param> /// <returns>要获取的网络频道。</returns> public INetworkChannel GetNetworkChannel(string name) { NetworkChannelBase networkChannel = null; if (m_NetworkChannels.TryGetValue(name ?? string.Empty, out networkChannel)) { return(networkChannel); } return(null); }
private void OnNetworkChannelCustomError(NetworkChannelBase networkChannel, object customErrorData) { if (m_NetworkCustomErrorEventHandler != null) { lock (m_NetworkCustomErrorEventHandler) { NetworkCustomErrorEventArgs networkCustomErrorEventArgs = NetworkCustomErrorEventArgs.Create(networkChannel, customErrorData); m_NetworkCustomErrorEventHandler(this, networkCustomErrorEventArgs); ReferencePool.Release(networkCustomErrorEventArgs); } } }
private void OnNetworkChannelError(NetworkChannelBase networkChannel, NetworkErrorCode errorCode, SocketError socketErrorCode, string errorMessage) { if (m_NetworkErrorEventHandler != null) { lock (m_NetworkErrorEventHandler) { NetworkErrorEventArgs networkErrorEventArgs = NetworkErrorEventArgs.Create(networkChannel, errorCode, socketErrorCode, errorMessage); m_NetworkErrorEventHandler(this, networkErrorEventArgs); ReferencePool.Release(networkErrorEventArgs); } } }
private void OnNetworkChannelMissHeartBeat(NetworkChannelBase networkChannel, int missHeartBeatCount) { if (m_NetworkMissHeartBeatEventHandler != null) { lock (m_NetworkMissHeartBeatEventHandler) { NetworkMissHeartBeatEventArgs networkMissHeartBeatEventArgs = NetworkMissHeartBeatEventArgs.Create(networkChannel, missHeartBeatCount); m_NetworkMissHeartBeatEventHandler(this, networkMissHeartBeatEventArgs); ReferencePool.Release(networkMissHeartBeatEventArgs); } } }
private void OnNetworkChannelClosed(NetworkChannelBase networkChannel) { if (m_NetworkClosedEventHandler != null) { lock (m_NetworkClosedEventHandler) { NetworkClosedEventArgs networkClosedEventArgs = NetworkClosedEventArgs.Create(networkChannel); m_NetworkClosedEventHandler(this, networkClosedEventArgs); ReferencePool.Release(networkClosedEventArgs); } } }
private void OnNetworkChannelConnected(NetworkChannelBase networkChannel, object userData) { if (m_NetworkConnectedEventHandler != null) { lock (m_NetworkConnectedEventHandler) { NetworkConnectedEventArgs networkConnectedEventArgs = NetworkConnectedEventArgs.Create(networkChannel, userData); m_NetworkConnectedEventHandler(this, networkConnectedEventArgs); ReferencePool.Release(networkConnectedEventArgs); } } }
/// <summary> /// 关闭并清理网络管理器。 /// </summary> internal override void Shutdown() { foreach (KeyValuePair <string, NetworkChannelBase> networkChannel in m_NetworkChannels) { NetworkChannelBase networkChannelBase = networkChannel.Value; networkChannelBase.NetworkChannelConnected -= OnNetworkChannelConnected; networkChannelBase.NetworkChannelClosed -= OnNetworkChannelClosed; networkChannelBase.NetworkChannelMissHeartBeat -= OnNetworkChannelMissHeartBeat; networkChannelBase.NetworkChannelError -= OnNetworkChannelError; networkChannelBase.NetworkChannelCustomError -= OnNetworkChannelCustomError; networkChannelBase.Shutdown(); } m_NetworkChannels.Clear(); }
/// <summary> /// 销毁网络频道。 /// </summary> /// <param name="name">网络频道名称。</param> /// <returns>是否销毁网络频道成功。</returns> public bool DestroyNetworkChannel(string name) { NetworkChannelBase networkChannel = null; if (m_NetworkChannels.TryGetValue(name ?? string.Empty, out networkChannel)) { networkChannel.NetworkChannelConnected -= OnNetworkChannelConnected; networkChannel.NetworkChannelClosed -= OnNetworkChannelClosed; networkChannel.NetworkChannelMissHeartBeat -= OnNetworkChannelMissHeartBeat; networkChannel.NetworkChannelError -= OnNetworkChannelError; networkChannel.NetworkChannelCustomError -= OnNetworkChannelCustomError; networkChannel.Shutdown(); return(m_NetworkChannels.Remove(name)); } return(false); }
/// <summary> /// 创建网络频道。 /// </summary> /// <param name="name">网络频道名称。</param> /// <param name="serviceType">网络服务类型。</param> /// <param name="networkChannelHelper">网络频道辅助器。</param> /// <returns>要创建的网络频道。</returns> public INetworkChannel CreateNetworkChannel(string name, ServiceType serviceType, INetworkChannelHelper networkChannelHelper) { if (networkChannelHelper == null) { throw new GameFrameworkException("Network channel helper is invalid."); } if (networkChannelHelper.PacketHeaderLength < 0) { throw new GameFrameworkException("Packet header length is invalid."); } if (HasNetworkChannel(name)) { throw new GameFrameworkException(Utility.Text.Format("Already exist network channel '{0}'.", name ?? string.Empty)); } NetworkChannelBase networkChannel = null; switch (serviceType) { case ServiceType.Tcp: networkChannel = new TcpNetworkChannel(name, networkChannelHelper); break; case ServiceType.TcpWithSyncReceive: networkChannel = new TcpWithSyncReceiveNetworkChannel(name, networkChannelHelper); break; default: throw new GameFrameworkException(Utility.Text.Format("Not supported service type '{0}'.", serviceType.ToString())); } networkChannel.NetworkChannelConnected += OnNetworkChannelConnected; networkChannel.NetworkChannelClosed += OnNetworkChannelClosed; networkChannel.NetworkChannelMissHeartBeat += OnNetworkChannelMissHeartBeat; networkChannel.NetworkChannelError += OnNetworkChannelError; networkChannel.NetworkChannelCustomError += OnNetworkChannelCustomError; m_NetworkChannels.Add(name, networkChannel); return(networkChannel); }