示例#1
0
        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);
                }
            }
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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);
        }