private static async Task GetGameResults(string apiKey, string userKey)
        {
            var command = new GetUsersGames(apiKey, userKey);
            var results = await command.ExecuteAsync();

            var command2 = new GetGames(apiKey);
            int index    = 1;

            foreach (var result in results.response.games)
            {
                command2.SetAppId(result.appid);

                var game = await command2.ExecuteAsync().ConfigureAwait(false);

                Console.WriteLine($"Game {index}: appName - {game.game.gameName} ,app_id - {result.appid}, playtime_forever - {result.playtime_forever}");
                index++;
            }
        }
        private async Task GetRandomGame(string apiKey, string userId)
        {
            //var command = new GetUsersGames(apiKey, userId);
            if (_userGameList == null)
            {
                _userGameList = await _steamApiClient.GetUsersGames(userId).ConfigureAwait(false);
            }

            var command2 = new GetGames(apiKey);

            GameData game;
            int      id;

            do
            {
                var appIds = _userGameList.response.games.Select(x => x.appid).ToList();

                //One Route
                int r = rnd.Next(appIds.Count);
                //TODO: Filter results
                id = appIds[r];
                var gameToRemove = _userGameList.response.games.FirstOrDefault(x => x.appid == id);
                command2.SetAppId(id);

                game = await command2.ExecuteAsync().ConfigureAwait(false);

                if (game.game.gameName == null)
                {
                    //REmove app id from list
                    var removed = _userGameList.response.games.Remove(gameToRemove);
                    if (removed)
                    {
                        Console.WriteLine($"INFO: App Id resulted in a null game name. Game Removed From List AppId: {id}");
                    }
                }
                if (game.game.gameName == "")
                {
                    Console.WriteLine($"INFO: App Id resulted in a game name of \"\". Game NOT Removed From List AppId: {id}");
                }
            } while (game.game.gameName == null);


            Console.WriteLine($"Random Game Name - {game.game.gameName} ,app_id - {id}");
        }
        public static void HandleMessage(GetGames request, CommunicationServer server, Socket handler)
        {
            List <GameInfo> gi = new List <GameInfo>();

            foreach (var game in server.RegisteredGames)
            {
                if (game.HasStarted)
                {
                    continue;
                }
                gi.Add(new GameInfo()
                {
                    blueTeamPlayers = game.BlueTeamPlayersCount,
                    redTeamPlayers  = game.RedTeamPlayersCount,
                    gameName        = game.Name
                });
            }
            var rg = new RegisteredGames()
            {
                GameInfo = gi.ToArray()
            };

            server.ConnectionEndpoint.SendFromServer(handler, XmlMessageConverter.ToXml(rg));
        }
        /// <summary>
        /// Checks for installed games
        /// </summary>
        /// <returns>True if new games were found, otherwise false</returns>
        public async Task <bool> RunGameFinderAsync()
        {
            if (IsGameFinderRunning)
            {
                return(false);
            }

            IsGameFinderRunning = true;

            // Keep track of found games which have been added
            var addedGames = new List <Games>();

            try
            {
                // Get all games which have not been added
                var games = GetGames.Where(x => !x.IsAdded()).ToArray();

                RL.Logger?.LogTraceSource($"The following games were added to the game checker: {games.JoinItems(", ")}");

                // Get additional finder items
                var finderItems = new List <FinderItem>(1);

                // Create DOSBox finder item if it doesn't exist
                if (!File.Exists(Data.DosBoxPath))
                {
                    var names = new string[]
                    {
                        "DosBox",
                        "Dos Box"
                    };

                    void foundAction(FileSystemPath installDir, object parameter)
                    {
                        if (File.Exists(Data.DosBoxPath))
                        {
                            RL.Logger?.LogWarningSource("The DosBox executable was not added from the game finder due to already having been added");
                            return;
                        }

                        RL.Logger?.LogInformationSource("The DosBox executable was found from the game finder");

                        Data.DosBoxPath = installDir + "DOSBox.exe";
                    }

                    finderItems.Add(new FinderItem(names, "DosBox", x => (x + "DOSBox.exe").FileExists ? x : null, foundAction, "DOSBox"));
                }

                // Run the game finder and get the result
                var foundItems = await new GameFinder(games, finderItems).FindGamesAsync();

                // Add the found items
                foreach (var foundItem in foundItems)
                {
                    // Handle the item
                    await foundItem.HandleItemAsync();

                    // If a game, add to list
                    if (foundItem is GameFinderResult game)
                    {
                        addedGames.Add(game.Game);
                    }
                }

                // Show message if new games were found
                if (foundItems.Count > 0)
                {
                    // Split into found games and items and sort
                    var gameFinderResults = foundItems.OfType <GameFinderResult>().OrderBy(x => x.Game).Select(x => x.DisplayName);
                    var finderResults     = foundItems.OfType <FinderResult>().OrderBy(x => x.DisplayName).Select(x => x.DisplayName);

                    await Services.MessageUI.DisplayMessageAsync($"{Resources.GameFinder_GamesFound}{Environment.NewLine}{Environment.NewLine}• {gameFinderResults.Concat(finderResults).JoinItems(Environment.NewLine + "• ")}", Resources.GameFinder_GamesFoundHeader, MessageType.Success);

                    RL.Logger?.LogInformationSource($"The game finder found the following games {foundItems.JoinItems(", ", x => x.ToString())}");

                    return(true);
                }
            }
            catch (Exception ex)
            {
                ex.HandleError("Game finder");

                await Services.MessageUI.DisplayExceptionMessageAsync(ex, Resources.GameFinder_Error);
            }
            finally
            {
                // Refresh if any games were added
                if (addedGames.Any())
                {
                    await OnRefreshRequiredAsync(new RefreshRequiredEventArgs(addedGames, true, false, false, false));
                }

                IsGameFinderRunning = false;
            }

            return(false);
        }
 public IEnumerable<IGame> GetGames()
 {
     var command = new GetGames();
     _executer.Execute(command);
     return command.Result;
 }