private async Task CompareWithCache(LadderEntry entry, IMemoryCache cache, Func<string, Task> Send) { var key = entry.Request.RegionID + ":" + entry.RealmID + ":" + entry.Name; LadderEntry cachedEntry = default(LadderEntry); var cached = cache.TryGetValue(key, out cachedEntry); cache.Set(key, entry); if (cached) { var change = new LadderChange(cachedEntry, entry); if (change.Changed()) { SaveChange(change); BroadcastChange(change, Send); } } }
public async Task GetRecentActivity( string bracket, BattleDotSwag.Locale locale, BattleDotSwag.Region region, string key, IMemoryCache cache, Func<string, Task> Send) { var endpoint = new LeaderboardEndpoint(bracket, locale, key); var requestor = new BattleNetService(); var leaderboard = new List<LadderEntry>(); var request = new QueueDodge.Models.BattleNetRequest() { Bracket = bracket, Locale = locale.ToString(), RegionID = (int)region, RequestDate = DateTime.Now, RequestType = "leaderboard", Url = requestor.GetUri(endpoint, region).ToString(), Duration = 0 }; var addedRequest = data.BattleNetRequests.Add(request).Entity; data.SaveChanges(); var json = requestor.Get(endpoint, region).Result; var ladder = JsonConvert.DeserializeObject<Leaderboard>(json); foreach(var entry in ladder.Rows) { var ladderEntry = new LadderEntry(entry, addedRequest); leaderboard.Add(ladderEntry); CompareWithCache(ladderEntry, cache, Send); }; cache.Set(region + ":" + bracket, leaderboard); }