コード例 #1
0
        public async Task <IEnumerable <BlizzardPlayer> > GetSlimGuildMembersDataAsync(BlizzardRegion region, string guild, string realm)
        {
            var guildDataJson = await this.blizzardService.GetGuildMembersAsync(guild, realm, region);

            var members = GuildMemberParsing.GetSlimPlayersFromGuildPlayerList(guildDataJson).ToList();

            return(members.Select(x => new BlizzardPlayer()
            {
                GuildName = guild,
                PlayerName = x.Name,
                PlayerRealmName = x.RealmName,
                Class = x.Class,
                Level = x.Level
            }));
        }
コード例 #2
0
        public async Task <IEnumerable <GuildMemberStats> > GetLargeGuildMembersDataAsync(BlizzardRegion region, string guild, string realm, IProgress <double> progress)
        {
            var guildDataJson = await this.blizzardService.GetGuildMembersAsync(guild, realm, region);

            var members = GuildMemberParsing.GetSlimPlayersFromGuildPlayerList(guildDataJson).ToList();

            foreach (var member in members)
            {
                member.RegionName = BlizzardService.GetRegionString(region);
                member.GuildName  = guild;
            }

            int totalCount = members.Count();

            int count = 0;

            var taskList = new List <Task <GuildMemberStats> >();

            foreach (var member in members)
            {
                taskList.Add(Task.Run(async() =>
                {
                    try
                    {
                        if (await this.PopulateMemberDataAsync(member, region))
                        {
                            return(member);
                        }

                        return(null);
                    }
                    catch (Exception e)
                    {
                        return(null);
                    }
                    finally
                    {
                        progress.Report((double)count++ / totalCount);
                    }
                }));
            }

            await Task.WhenAll(taskList);

            return(taskList.Select(x => x.Result).Where(x => x != null));
        }
コード例 #3
0
        private async Task <bool> PopulateMemberDataAsync(GuildMemberStats member, BlizzardRegion region)
        {
            string items  = string.Empty;
            string mounts = string.Empty;
            string pets   = string.Empty;
            string pvp    = string.Empty;

            var itemsTask = this.throttler.Throttle(async() =>
            {
                items = await this.blizzardService.GetPlayerItemsAsync(member.Name, member.RealmName, region);
            });

            var mountsTask = this.throttler.Throttle(async() =>
            {
                mounts = await this.blizzardService.GetPlayerMountsAsync(member.Name, member.RealmName, region);
            });

            var petsTask = this.throttler.Throttle(async() =>
            {
                pets = await this.blizzardService.GetPlayerPetsAsync(member.Name, member.RealmName, region);
            });

            var pvpTask = this.throttler.Throttle(async() =>
            {
                pvp = await this.blizzardService.GetPlayerPvpStatsAsync(member.Name, member.RealmName, region);
            });

            await Task.WhenAll(new Task[] { itemsTask, mountsTask, petsTask, pvpTask });

            try
            {
                var itemDetails = GuildMemberParsing.GetItemsDetailsFromJson(items);

                if (itemDetails.LastModifiedDateTime < DateTime.Now - FilterPlayersOlderThan)
                {
                    return(false);
                }

                this.PopulateItemsDetails(member, itemDetails);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error reading player items for " + member.Name);
            }

            try
            {
                var mountsDetails = GuildMemberParsing.GetMountDetailsFromJson(mounts);

                member.MountCount = mountsDetails.NumberCollected;
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error reading mounts for " + member.Name);
            }

            try
            {
                var petDetails = GuildMemberParsing.GetPetDetailsFromJson(pets);

                member.PetCount = petDetails.NumberCollected;
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error reading pets for " + member.Name);
            }

            try
            {
                var pvpDetails = GuildMemberParsing.GetPvpStatsFromJson(pvp);

                this.PopulatePvpStats(member, pvpDetails);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error reading PvP stats for " + member.Name);
            }

            Debug.WriteLine("Processed member " + member.Name);

            return(true);
        }