/// <summary> /// Disconnects the client /// </summary> /// <param name="disconnecting">if <c>true</c>, the function won't call Socket.Disconnect</param> public void Disconnect(bool disconnecting = false) { lock (this) { if (!disconnecting) { m_SocketContext.Disconnect(); } if (!m_blDisconnected) { if (m_PingTimer.IsRunning) { m_PingTimer.Stop(); } m_blDisconnected = true; } } }
/// <summary> /// Disconnects the client /// </summary> /// <param name="disconnecting">if <c>true</c>, the function won't call Socket.Disconnect</param> public void Disconnect(bool disconnecting = false) { lock (this) { if (!disconnecting) { m_SocketContext.Disconnect(); } if (!m_blDisconnected) { Globals.GlobalDB.ExecuteCommandAsync("DELETE FROM _ActiveSessions WHERE UserSID = {0}", m_AccountInfo.SID); if (m_PingTimer.IsRunning) { m_PingTimer.Stop(); } if (m_Character != null && m_Character.m_isIngame) { lock (m_Character.m_lock) { if (m_Character.m_movementTimer.IsRunning) { m_Character.m_movementTimer.Stop(); } } m_Character.Disappear(false); Globals.ShardDB.ExecuteCommandAsync(String.Format("UPDATE _Char SET LatestRegion = {0}, PosX = {1}, PosY = {2}, PosZ = {3} WHERE CharID = {4}", m_Character.m_region, m_Character.m_position.X, m_Character.m_position.Y, m_Character.m_position.Z, m_Character.m_charId)); } m_Character = null; m_AccountInfo.Characters = null; m_AccountInfo = default(AccountInfo); m_blDisconnected = true; } } }