/// <summary> /// Disconnects from allsrv, logs games that were in progress and shuts down TAG. /// </summary> public static void Stop() { TagTrace.WriteLine(TraceLevel.Info, "Shutting down..."); // De-initialize core (unhook events) AGCEventHandler.Uninitialize(); TagTrace.WriteLine(TraceLevel.Verbose, "Events unhooked."); TagTrace.WriteLine(TraceLevel.Info, "Shutting the logger down..."); // Shutdown the logger GameLogger.Uninitialize(); TagTrace.WriteLine(TraceLevel.Verbose, "Logger shut down."); TagTrace.WriteLine(TraceLevel.Info, "Disconnecting from Allsrv..."); // Disconnect from allsrv GameServer.Disconnect(); TagTrace.WriteLine(TraceLevel.Verbose, "Disconnected."); TagTrace.WriteLine(TraceLevel.Info, "Exiting..."); // Signal the "Main" thread to end processing if (_closeAppResetEvent != null) { _closeAppResetEvent.Set(); } // Allow the main thread to end, or force-close after 5s if (_mainThread != null) { _mainThread.Join(5000); } // Shutdown Tracing and Debugging TagTrace.Uninitialize(); TagTrace.Uninitialize(); }
/// <summary> /// Initializes the GameServer and reads the games from the server /// </summary> public static void Initialize() { _players = new Players(_server); // Start Allsrv if not already started if (!AllsrvConnector.IsRunning()) { AllsrvConnector.StartAllsrv(); } // Connect to Allsrv and retrieve the server object _connector = AllsrvConnector.Connect(); _server = _connector.Session.Server; TagTrace.WriteLine(TraceLevel.Info, "Connection to Allsrv established."); // Load Player list TagTrace.WriteLine(TraceLevel.Verbose, "Retrieving players..."); _players.Initialize(_server); TagTrace.WriteLine(TraceLevel.Info, "Playerlist loaded. {0} players online.", _players.Count); // Read the games TagTrace.WriteLine(TraceLevel.Verbose, "Reading Games..."); _games = new Games(); for (int i = 0; i < _server.Games.Count; i++) { object Index = (object)i; IAGCGame TempGame = _server.Games.get_Item(ref Index); Game NewGame = new Game(TempGame); _games.Add(NewGame); // Initialize game if in progress if (NewGame.InProgress) { // Get StartTime DateTime StartTime = DateTime.FromOADate(TempGame.GameParameters.TimeStart); // Initialize game NewGame.Start(StartTime); // Log event NewGame.GameData.LogGameStarted(StartTime); } } TagTrace.WriteLine(TraceLevel.Info, "Games read. {0} games online.", _games.Count); // Connect event handlers TagTrace.WriteLine(TraceLevel.Verbose, "Hooking up events..."); AGCEventHandler.Initialize(_connector); TagTrace.WriteLine(TraceLevel.Verbose, "Events connected."); }
/// <summary> /// Handles the Terminate AGCEvent /// </summary> /// <param name="sender">The object firing the event</param> /// <param name="e">The arguments of the event</param> public static void TerminateAGCEventHandler(object sender, TerminateAGCEventArgs e) { try { TagTrace.WriteLine(TraceLevel.Verbose, "Terminate event received."); // De-initialize core (unhook events) AGCEventHandler.Uninitialize(); // Kill all game info GameServer.Disconnect(); // Start reconnect timer ReconnectTimer.Start(); } catch (Exception ex) { TagTrace.WriteLine(TraceLevel.Error, "Error handling Terminate event: {0}", ex.Message); } }