/// <summary> /// Shutsdown all of the Gamespy Servers /// </summary> public static void Shutdown() { // Shutdown Login Servers ClientManager.Shutdown(); SearchProvider.Shutdown(); MasterServer.Shutdown(); CDKeyServer.Shutdown(); // Update status bIsRunning = false; // Trigger the OnShutdown Event Stopped(); }
/// <summary> /// Starts the Login Server listeners, and begins accepting new connections /// </summary> public static void Start() { // Make sure we arent already running! if (bIsRunning) { return; } // Start the DB Connection using (GamespyDatabase Database = new GamespyDatabase()) { // First, make sure our account table exists if (!Database.TablesExist) { string message = "In order to use the Gamespy Emulation feature of this program, we need to setup a database. " + "You may choose to do this later by clicking \"Cancel\". Would you like to setup the database now?"; DialogResult R = MessageBox.Show(message, "Gamespy Database Setup", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (R == DialogResult.Yes) { SetupManager.ShowDatabaseSetupForm(DatabaseMode.Gamespy, MainForm.Instance); } // Call the stoOnShutdown event to Re-enable the main forms buttons Stopped(); return; } else if (Database.NeedsUpdated) { // We cannot run an outdated database DialogResult R = MessageBox.Show( String.Format( "The Gamespy database tables needs to be updated to version {0} before using this feature. Would you like to do this now?", GamespyDatabase.LatestVersion ) + Environment.NewLine.Repeat(1) + "NOTE: You should backup your gamespy account table if you are unsure as this update cannot be undone!", "Gamespy Database Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question ); // If the user doesnt migrate the database tables, quit if (R != DialogResult.Yes) { // Call the stoOnShutdown event to Re-enable the main forms buttons Stopped(); return; } // Do table migrations Database.MigrateTables(); } } // Bind gpcm server on port 29900 int port = 29900; // Setup the DebugLog DebugLog.LoggingEnabled = Program.Config.GamespyServerDebug; if (Program.Config.GamespyServerDebug) { DebugLog.ClearLog(); } try { // Begin logging DebugLog.Write("=== Gamespy Emulator Initializing ==="); DebugLog.Write("Starting Client Manager"); // Start the client manager ClientManager = new GpcmServer(); // Begin logging DebugLog.Write("Bound to TCP port: " + port); DebugLog.Write("Starting Account Service Provider"); // Start search provider server port++; SearchProvider = new GpspServer(); // Begin logging DebugLog.Write("Bound to TCP port: " + port); DebugLog.Write("Starting Master Server"); // Start then Master Server MasterServer = new MasterServer(ref port, DebugLog); // Start CDKey Server port = 29910; DebugLog.Write("Starting Cdkey Server"); CDKeyServer = new CDKeyServer(DebugLog); // Begin logging DebugLog.Write("=== Gamespy Emulator Initialized ==="); } catch (Exception E) { Notify.Show( "Failed to Start Gamespy Servers!", "Error binding to port " + port + ": " + Environment.NewLine + E.Message, AlertType.Warning ); // Append log if (DebugLog != null) { DebugLog.Write("=== Failed to Start Emulator Servers! ==="); DebugLog.Write("Error binding to port " + port + ": " + E.Message); } // Shutdown all started servers if (ClientManager != null && ClientManager.IsListening) { ClientManager.Shutdown(); } if (SearchProvider != null && SearchProvider.IsListening) { SearchProvider.Shutdown(); } if (MasterServer != null && MasterServer.IsRunning) { MasterServer.Shutdown(); } // Cdkey server must have throwm the exception at this point, since it starts last // Throw excpetion to parent throw; } // Let the client know we are ready for connections bIsRunning = true; Started(); }
/// <summary> /// Starts the Login Server listeners, and begins accepting new connections /// </summary> public static void Start() { // Make sure we arent already running! if (bIsRunning) return; // Start the DB Connection using (GamespyDatabase Database = new GamespyDatabase()) { // First, make sure our account table exists if (!Database.TablesExist) { string message = "In order to use the Gamespy Emulation feature of this program, we need to setup a database. " + "You may choose to do this later by clicking \"Cancel\". Would you like to setup the database now?"; DialogResult R = MessageBox.Show(message, "Gamespy Database Setup", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (R == DialogResult.Yes) SetupManager.ShowDatabaseSetupForm(DatabaseMode.Gamespy, MainForm.Instance); // Call the stoOnShutdown event to Re-enable the main forms buttons Stopped(); return; } else if (Database.NeedsUpdated) { // We cannot run an outdated database DialogResult R = MessageBox.Show( String.Format( "The Gamespy database tables needs to be updated to version {0} before using this feature. Would you like to do this now?", GamespyDatabase.LatestVersion ) + Environment.NewLine.Repeat(1) + "NOTE: You should backup your gamespy account table if you are unsure as this update cannot be undone!", "Gamespy Database Update", MessageBoxButtons.YesNo, MessageBoxIcon.Question ); // If the user doesnt migrate the database tables, quit if (R != DialogResult.Yes) { // Call the stoOnShutdown event to Re-enable the main forms buttons Stopped(); return; } // Do table migrations Database.MigrateTables(); } } // Bind gpcm server on port 29900 int port = 29900; // Setup the DebugLog DebugLog.LoggingEnabled = Program.Config.GamespyServerDebug; if (Program.Config.GamespyServerDebug) DebugLog.ClearLog(); try { // Begin logging DebugLog.Write("=== Gamespy Emulator Initializing ==="); DebugLog.Write("Starting Client Manager"); // Start the client manager ClientManager = new GpcmServer(); // Begin logging DebugLog.Write("Bound to TCP port: " + port); DebugLog.Write("Starting Account Service Provider"); // Start search provider server port++; SearchProvider = new GpspServer(); // Begin logging DebugLog.Write("Bound to TCP port: " + port); DebugLog.Write("Starting Master Server"); // Start then Master Server MasterServer = new MasterServer(ref port, DebugLog); // Start CDKey Server port = 29910; DebugLog.Write("Starting Cdkey Server"); CDKeyServer = new CDKeyServer(DebugLog); // Begin logging DebugLog.Write("=== Gamespy Emulator Initialized ==="); } catch (Exception E) { Notify.Show( "Failed to Start Gamespy Servers!", "Error binding to port " + port + ": " + Environment.NewLine + E.Message, AlertType.Warning ); // Append log if (DebugLog != null) { DebugLog.Write("=== Failed to Start Emulator Servers! ==="); DebugLog.Write("Error binding to port " + port + ": " + E.Message); } // Shutdown all started servers if (ClientManager != null && ClientManager.IsListening) ClientManager.Shutdown(); if (SearchProvider != null && SearchProvider.IsListening) SearchProvider.Shutdown(); if (MasterServer != null && MasterServer.IsRunning) MasterServer.Shutdown(); // Cdkey server must have throwm the exception at this point, since it starts last // Throw excpetion to parent throw; } // Let the client know we are ready for connections bIsRunning = true; Started(); }