/// <summary> /// Shutsdown the ClientManager server and socket /// </summary> public void Shutdown() { // Stop accepting new connections IgnoreNewConnections = true; Exiting = true; // Discard the poll timer PollTimer.Stop(); PollTimer.Dispose(); StatusTimer.Stop(); StatusTimer.Dispose(); // Disconnected all connected clients Console.WriteLine("Disconnecting all users..."); Parallel.ForEach(Clients.Values, client => client.Disconnect(DisconnectReason.ForcedServerShutdown)); Parallel.ForEach(Processing.Values, client => client.Disconnect(DisconnectReason.ForcedServerShutdown)); // Update the database try { // Set everyone's online session to 0 databaseDriver.Execute("UPDATE profiles SET status=0, sesskey = NULL"); } catch (Exception e) { LogWriter.Log.WriteException(e); } // Update Connected Clients in the Database Clients.Clear(); // Tell the base to dispose all free objects Dispose(); }
private bool disposedValue = false; // To detect redundant calls protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { TaskTimer?.Dispose(); TaskTimer = null; StatusTimer?.Dispose(); StatusTimer = null; } disposedValue = true; } }
/// <summary> /// Shutsdown the ClientManager server and socket /// </summary> public void Shutdown() { // Stop accepting new connections base.IgnoreNewConnections = true; Exiting = true; // Unregister events so we dont get a shit ton of calls GpcmClient.OnSuccessfulLogin -= GpcmClient_OnSuccessfulLogin; GpcmClient.OnDisconnect -= GpcmClient_OnDisconnect; // Discard the poll timer PollTimer.Stop(); PollTimer.Dispose(); StatusTimer.Stop(); StatusTimer.Dispose(); // Disconnected all connected clients Console.WriteLine("Disconnecting all users..."); Parallel.ForEach(Clients.Values, client => client.Disconnect(DisconnectReason.ForcedServerShutdown)); Parallel.ForEach(Processing.Values, client => client.Disconnect(DisconnectReason.ForcedServerShutdown)); // Update the database try { // Set everyone's online session to 0 using (Database.GamespyDatabase db = new Database.GamespyDatabase()) db.Execute("UPDATE player SET online=0"); } catch (Exception e) { Program.ErrorLog.Write("WARNING: [GpcmServer.Shutdown] Failed to update client database: " + e.Message); } // Update Connected Clients in the Database Clients.Clear(); // Shutdown the listener socket base.ShutdownSocket(); // Tell the base to dispose all free objects base.Dispose(); }
/// <summary> /// Shutsdown the ClientManager server and socket /// </summary> public void Shutdown() { // Stop accepting new connections IgnoreNewConnections = true; Exiting = true; // Unregister events so we dont get a shit ton of calls GPCMClient.OnSuccessfulLogin -= ClientSuccessfulLogin; GPCMClient.OnDisconnect -= ClientDisconnected; // Discard the poll timer PollTimer.Stop(); PollTimer.Dispose(); StatusTimer.Stop(); StatusTimer.Dispose(); // Disconnected all connected clients Console.WriteLine("Disconnecting all users..."); Parallel.ForEach(Clients.Values, client => client.DisconnectByReason(DisconnectReason.ForcedServerShutdown)); Parallel.ForEach(Processing.Values, client => client.DisconnectByReason(DisconnectReason.ForcedServerShutdown)); // Update the database try { // Set everyone's online session to 0 LoginQuery.ResetStatusAndSessionKey(); } catch (Exception e) { LogWriter.Log.WriteException(e); } // Update Connected Clients in the Database Clients.Clear(); DB.Dispose(); // Tell the base to dispose all free objects Dispose(); }
protected override void Dispose(bool disposingManagedResources) { if (_disposed) { return; } _disposed = true; if (disposingManagedResources) { } PollTimer?.Stop(); PollTimer?.Dispose(); StatusTimer?.Stop(); StatusTimer?.Dispose(); // Disconnected all connected clients Console.WriteLine("Disconnecting all users..."); //Parallel.ForEach(LoggedInSession.Values, client => client.DisconnectByReason(DisconnectReason.ForcedServerShutdown)); //Parallel.ForEach(InLoginSession.Values, client => client.DisconnectByReason(DisconnectReason.ForcedServerShutdown)); //LoginQuery.ResetAllStatusAndSessionKey(); LoggedInSession.Clear(); DB.Dispose(); base.Dispose(disposingManagedResources); }