Exemple #1
0
        public async Task <List <FullPlayerInfo> > GetInfoFromSteamAPI(List <BasicPlayerInfo> basicPlayersInfoList)
        {
            var httpClient = new HttpClient();

            var baseUrl = @"https://api.steampowered.com/ISteamUser/{0}/{1}/?steamids={2}&key={3}";

            var generalInfoList = new List <GeneralPlayerInfo>(); // create a list for the data of the first request (general info about the player)
            var banInfoList     = new List <PlayersBanInfo>();    // create a list for the data of the second request (the player's ban information)

            var subLists = new List <List <BasicPlayerInfo> >();  // a list to hold the result of splitting the main list into 100-items sized lists (steam api restrection on IDs per request)

            for (int i = 0; i < basicPlayersInfoList.Count; i += 100)
            {
                subLists.Add(basicPlayersInfoList.GetRange(i, Math.Min(100, basicPlayersInfoList.Count - i)));
            }

            IsProgressBarIndeterminate = false;
            LoadingText = "Retriving info from the Steam Web API";
            // loop through the sublists, extract the IDs, convert them then save them to the IDs string
            foreach (var list in subLists)
            {
                LoadingProgressValue = (subLists.IndexOf(list) * 100) / subLists.Count();
                string IDs = "";

                foreach (var player in list)
                {
                    string id = SteamIDConverter.ConvertToSteam64(player.Steam32);
                    if (!string.IsNullOrWhiteSpace(id))
                    {
                        if (list.IndexOf(player) < list.Count - 1)
                        {
                            IDs += id + ",";
                        }
                        else
                        {
                            IDs += id;
                        }
                    }
                }


                var formattedUrl        = string.Format(baseUrl, "GetPlayerSummaries", "v2", IDs, SteamKeyText);
                var generalInfoResponse = await httpClient.GetAsync(formattedUrl);

                if (generalInfoResponse.IsSuccessStatusCode)
                {
                    var content = await generalInfoResponse.Content.ReadAsStringAsync();

                    var generalPlayerRootList = JsonConvert.DeserializeObject <GeneralPlayerRootObject>(content);
                    generalInfoList.AddRange(generalPlayerRootList.response.players);
                }
                else
                {
                    throw new HttpRequestException();
                }

                formattedUrl = string.Format(baseUrl, "GetPlayerBans", "v1", IDs, SteamKeyText);
                var banInfoResponse = await httpClient.GetAsync(formattedUrl);

                if (banInfoResponse.IsSuccessStatusCode)
                {
                    var content = await banInfoResponse.Content.ReadAsStringAsync();

                    var generalPlayerRootList = JsonConvert.DeserializeObject <RootBanObject>(content);
                    banInfoList.AddRange(generalPlayerRootList.players);
                }
                else
                {
                    throw new HttpRequestException();
                }
            }
            // pick the relevant info from the general info list and the ban list and combine them to a complete info list using the steamid (in 64 format)
            var FullPlayersInfoList = (from generalInfo in generalInfoList
                                       join banInfo in banInfoList
                                       on generalInfo.steamid equals banInfo.SteamId
                                       select new
            {
                generalInfo.steamid,
                generalInfo.personaname,
                generalInfo.profileurl,
                banInfo.CommunityBanned,
                banInfo.VACBanned,
                banInfo.NumberOfGameBans,
                banInfo.NumberOfVACBans,
                banInfo.DaysSinceLastBan
            } into intermediateList
                                       join basicInfo in basicPlayersInfoList
                                       on intermediateList.steamid equals SteamIDConverter.ConvertToSteam64(basicInfo.Steam32)
                                       orderby intermediateList.personaname
                                       select new FullPlayerInfo()
            {
                Steam32 = basicInfo.Steam32,                            // the id used in the full list is 32 format
                NameDb = basicInfo.NameDB,
                CurrentName = intermediateList.personaname,
                LastIp = basicInfo.LastIp,
                Steam64 = intermediateList.steamid,
                SteamUrl = intermediateList.profileurl,
                CommunityBanned = intermediateList.CommunityBanned,
                VACBanned = intermediateList.VACBanned,
                NumberOfGameBans = intermediateList.NumberOfGameBans,
                NumberOfVACBans = intermediateList.NumberOfVACBans,
                DaysSinceLastBan = intermediateList.DaysSinceLastBan
            }).ToList();

            // set the country code for each player in the full list to later be able to view it in the datagrid
            foreach (var player in FullPlayersInfoList)
            {
                player.CountryCode = GeoIPInfo.GetCountryCodeFromIP(GeoIPinfoList, player.LastIp);
            }


            return(FullPlayersInfoList);
        }
Exemple #2
0
 public MainWindowViewModel(IOpenFileService openFileService)
 {
     _openFileService       = openFileService;
     LoadFileCommand        = new DelegateCommand(LoadFile).ObservesCanExecute(() => CanBrowse);
     LoadDroppedFileCommand = new DelegateCommand <DragEventArgs>(LoadDroppedFile).ObservesCanExecute(() => CanBrowse);
     LoadNewFileCommand     = new DelegateCommand(LoadNewFile).ObservesCanExecute(() => IsFileLoaded);
     OpenLinkCommand        = new DelegateCommand <string>(OpenLink);
     OpenLinkCommand        = new DelegateCommand <string>(OpenLink);
     ShowBannedOnlyCommand  = new DelegateCommand(ShowBannedOnly);
     LookUpInfoCommand      = new DelegateCommand(LookUpInfo);
     SearchCommand          = new DelegateCommand(Search).ObservesCanExecute(() => IsFileLoaded);
     ClearCommand           = new DelegateCommand(Clear).ObservesCanExecute(() => IsFileLoaded);
     // read the csv file line by line, parse and convert to geoip, and finaly add to list
     GeoIPinfoList = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "IP2LOCATION-LITE.CSV")).Select(v => GeoIPInfo.ParseCSV(v)).ToList(); // no checks for failure, if this fail then the program should
 }