/// <summary> /// Kills the game and removes it from currentRunning /// </summary> public void KillGame() { try { lock (RunningGame) RunningGame?.Kill(); RunningGame = null; } catch { } }
/// <summary> /// Instances A game by index with a defualt of the first game avaible /// </summary> /// <param name="GameNumberToStart">The index of the game in the config</param> public void StartGame(object StartRequester, string GameGUIDToStart) { GameIsStartingEvent?.Invoke(this, new GameStartingEventArgs { GameName = Config[GameGUIDToStart].Name, RequestingObj = StartRequester }); RunningGame = new InstanceGame(Config[GameGUIDToStart]); RunningGame.GameHasEndedEvent += GameEndedEventChain; RunningGame.StartGame(); GameHasStartedEvent?.Invoke(this, new GameStartedEventArgs { GameName = Config[GameGUIDToStart].Name }); }
/// <summary> /// Instances A game by its name /// </summary> /// <param name="GameNumberToStart">The index of the game in the config</param> public void StartGameByName(object StartRequester, string GameNameToStart) { IGameModel gameConfig = Config.GetGameByName(GameNameToStart); GameIsStartingEvent?.Invoke(this, new GameStartingEventArgs { GameName = gameConfig.Name, RequestingObj = StartRequester }); RunningGame = new InstanceGame(gameConfig); RunningGame.GameHasEndedEvent += GameEndedEventChain; RunningGame.StartGame(); GameHasStartedEvent?.Invoke(this, new GameStartedEventArgs { GameName = gameConfig.Name }); }
/// <summary> /// A fuction for threads that will monitor the process and kill all on end or issue /// </summary> /// <param name="GameInstanceIn">the game Intances for listing(this)</param> protected static void Monitor(object GameInstanceIn) { string Reason = ""; //grab this GameInstance to watch InstanceGame GameInstance = (InstanceGame)GameInstanceIn; //set up a loop bool IsAlive = true; while (IsAlive) { //check for any reasons to end like primary exe has died lock (GameInstance.PrimaryGameExe) if (IsAlive) { IsAlive = !GameInstance.PrimaryGameExe.HasExited; Reason = ProcessEndedKillReason; } if (!IsAlive) { break; } //check if any optional exe's have died lock (GameInstance.OptionalExes) if (IsAlive) { IsAlive = !GameInstance.OptionalExes.All(x => x.OptionalExe.HasExited); Reason = ProcessEndedKillReason; } if (!IsAlive) { break; } //check if we still have play time lock (GameInstance) if (IsAlive && 0 != GameInstance.PlayTimeAllowed && (ulong)GameInstance.Timer.ElapsedMilliseconds < GameInstance.PlayTimeAllowed) { IsAlive = false; Reason = PlayTimeAllowedEndedKillReason; } } //Kill on end lock (GameInstance) GameInstance.Kill(Reason); }