Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
 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);
         }
     }
 }
Ejemplo n.º 3
0
 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);
         }
     }
 }
Ejemplo n.º 4
0
 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);
         }
     }
 }
Ejemplo n.º 5
0
 private void OnNetworkChannelClosed(NetworkChannelBase networkChannel)
 {
     if (m_NetworkClosedEventHandler != null)
     {
         lock (m_NetworkClosedEventHandler)
         {
             NetworkClosedEventArgs networkClosedEventArgs = NetworkClosedEventArgs.Create(networkChannel);
             m_NetworkClosedEventHandler(this, networkClosedEventArgs);
             ReferencePool.Release(networkClosedEventArgs);
         }
     }
 }
Ejemplo n.º 6
0
 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);
         }
     }
 }
Ejemplo n.º 7
0
        /// <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();
        }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
        /// <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);
        }