/// <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); }
/// <summary> /// 断开 /// </summary> public void Dispose() { if (m_LockDisposed.SetInvalid() == false) { return; } m_SocketServer.StopServer(); }
/// <summary> /// 断开 /// </summary> public void Dispose() { if (m_LockDisposed.SetInvalid() == false) { return; } m_SocketClient.StopConnect(); }
/// <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(); } }
/// <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(); } }
/// <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); } }