コード例 #1
0
ファイル: NetState.cs プロジェクト: indangerofcollapsing/wow
        /// <summary>
        /// 调用ClientSocketHandler.CloseSocket(...)的时候会产生此调用
        /// </summary>
        internal void OnDisconnect()
        {
            LOGs.WriteLine(LogMessageType.MSG_HACK, "OnDisconnect...... 0");

            // 默认是有效地,只检测有没有已经断开,如果已经断开,则不继续处理
            if (m_Running.SetInvalid() == false)
            {
                return;
            }

            LOGs.WriteLine(LogMessageType.MSG_HACK, "OnDisconnect...... 1");

            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);
        }
コード例 #2
0
ファイル: Listener.cs プロジェクト: indangerofcollapsing/wow
        /// <summary>
        /// 断开
        /// </summary>
        public void Dispose()
        {
            if (m_LockDisposed.SetInvalid() == false)
            {
                return;
            }

            m_SocketServer.StopServer();
        }
コード例 #3
0
ファイル: Connecter.cs プロジェクト: indangerofcollapsing/wow
        /// <summary>
        /// 断开
        /// </summary>
        public void Dispose()
        {
            if (m_LockDisposed.SetInvalid() == false)
            {
                return;
            }

            m_SocketClient.StopConnect();
        }
コード例 #4
0
ファイル: NetState.cs プロジェクト: indangerofcollapsing/wow
        /// <summary>
        /// 清理当前的网络数据,并断开连接
        /// </summary>
        /// <param name="bFlush"></param>
        public void Dispose(bool bFlush, long iSeconds)
        {
            // 防止多线程时多次调用Dispose(...)有问题
            if (m_Disposed.SetInvalid() == false)
            {
                return;
            }

            if (bFlush == true)
            {
                this.Flush();

                TimeSlice.StartTimeSlice(TimeSpan.FromSeconds(iSeconds), new TimeSliceCallback(this.InsideDispose));
            }
            else
            {
                this.InsideDispose();
            }
        }
コード例 #5
0
        /// <summary>
        /// 清理当前的网络数据,并断开连接
        /// </summary>
        /// <param name="bFlush"></param>
        public void Dispose(bool bFlush, long waitSeconds)
        {
            // 防止多线程时多次调用Dispose(...)有问题
            if (m_Disposed.SetInvalid() == false)
            {
                return;
            }

            if (bFlush == true)
            {
                Flush();

                TimeSlice.StartTimeSlice(TimeSpan.FromSeconds(waitSeconds), InsideDispose);
            }
            else
            {
                InsideDispose();
            }
        }
コード例 #6
0
        /// <summary>
        /// 内部断开(调用后此类不得再进行任何处理,因为已返回进内存池)
        /// </summary>
        internal void Free()
        {
            // 检测有没有调用过Free(...)函数
            if (m_LockFree.SetInvalid() == false)
            {
                return;
            }

            // 先调用Clear(...)
            m_ReceiveBuffer.Clear();

            // 取消回调
            if (m_ServiceHandle != null)
            {
                m_ServiceHandle.EventProcessData -= new EventHandler <ProcessDataAtServerEventArgs>(this.OnListenerProcessMessageBlock);
                m_ServiceHandle.EventDisconnect  -= new EventHandler <DisconnectAtServerEventArgs>(this.OnListenerDisconnect);
            }

            // 如果是Listener的则需要释放入内存池中...
            if (m_Listener != null)
            {
                m_Listener.Free(m_ReceiveBuffer);
            }
        }