private void HandleBroadcastCommand(GameSession inboundGameSession, string commandString) { if (string.IsNullOrWhiteSpace(commandString)) { return; } List <string> teamNames = FindTeamsSpecified(ref commandString); if (string.IsNullOrEmpty(commandString)) { return; } foreach (var gameSession in _gameSessionMap.GetAllGameSessions()) { if (gameSession.GameChannel == null) { continue; } if (teamNames == null || gameSession.HasAnyTeam(teamNames)) { Logger.WriteInfo(string.Format( "Sending command '{0}' to {1}", commandString, gameSession.Description )); SendGameCommand(gameSession, commandString); } } }
/// <summary> /// Check all process files mod dates, to see if recent /// </summary> private void CheckLiveProcessFiles() { var deadGames = new List <GameSession>(); foreach (var gameSession in _map.GetAllGameSessions()) { string heartbeatFile = gameSession.ProcessStatusFilepath; var status = GetStatusFromHeartbeatFileTime(gameSession); if (status == ServerAccountStatusEnum.None) { Logger.WriteDebug("Found dead game: {0}", gameSession.Description); deadGames.Add(gameSession); } else { // Handle orphan games that never got a heartbeat if (status == ServerAccountStatusEnum.Warning && gameSession.LastGoodStatusUtc == DateTime.MinValue) { status = ServerAccountStatusEnum.None; } if (gameSession.Status != status) { Logger.WriteDebug("Found orphan game {0}, changing status from {1} to {2}", gameSession.Description, gameSession.Status, status); gameSession.Status = status; NotifyGameChange(gameSession, GameChangeType.ChangeStatus); } } } foreach (var deadGame in deadGames) { deadGame.Status = ServerAccountStatusEnum.None; Logger.WriteDebug("Removing dead game: {0}", deadGame.Description); RemoveSessionByPidKey(deadGame.ProcessIdKey); } }
/// <summary> /// Get all server/accounts that are checked to be launched /// AND that are not already running /// </summary> /// <param name="accountList"></param> /// <returns></returns> private LaunchSorter.LaunchList GetLaunchListFromAccountList(IEnumerable <UserAccount> accountList) { var launchList = new LaunchSorter.LaunchList(); if (_gameSessionMap.GetAllGameSessions().Count >= 3) { return(launchList); } count_abc = (count_abc + 1) % 10; foreach (var account in accountList) { if (account.AccountLaunchable) { foreach (var server in account.Servers) { if (server.ServerSelected) { var account_name = account.Name; if (account.Name.ToLower().Contains("ztiel")) { account_name += count_abc.ToString(); } var state = _gameSessionMap.GetGameSessionStateByServerAccount(serverName: server.ServerName, accountName: account.Name); if (state != ServerAccountStatusEnum.None) { continue; } var launchItem = new LaunchItem() { Alias = account.Alias, AccountName = account_name, Priority = account.Priority, Password = account.Password, ServerName = server.ServerName, IpAndPort = server.ServerIpAndPort, GameApiUrl = server.GameApiUrl, LoginServerUrl = server.LoginServerUrl, DiscordUrl = server.DiscordUrl, EMU = server.EMU, CharacterSelected = server.ChosenCharacter, CustomLaunchPath = account.CustomLaunchPath, CustomPreferencePath = account.CustomPreferencePath, RodatSetting = server.RodatSetting, SecureSetting = server.SecureSetting }; launchList.Add(launchItem); } } } } return(launchList); }