Example #1
0
        /// <summary>
        /// 调用ClientSocketHandler.CloseSocket(...)的时候会产生此调用
        /// </summary>
        internal void OnDisconnect()
        {
            // 默认是有效地,只检测有没有已经断开,如果已经断开,则不继续处理
            if (m_Running.SetInvalid() == false)
            {
                return;
            }

            m_Socket.Free();

            // 如果还存在需要发送的数据,则直接清空
            if (m_SendQueue.IsEmpty == false)
            {
                m_SendQueue.Clear(); // 内部已经有锁定
            }
            // 断开的通知事件
            EventHandler <NetStateDisconnectEventArgs> tempEvent = m_EventDisconnect;

            if (tempEvent != null)
            {
                NetStateDisconnectEventArgs netStateDisconnectEventArgs = new NetStateDisconnectEventArgs(this);
                tempEvent(this, netStateDisconnectEventArgs);
            }

            // 放入无效客户端的集合内,等待处理
            m_World.DisposedNetStates(this);

            Logs.WriteLine(LogMessageType.MSG_INFO, LanguageString.SingletonInstance.NetStateString002, this);
        }