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 })); }
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)); }
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); }