private void UpdateLeaderboard() { try { Debug.WriteLine(DateTime.Now + " | Starting updating the leaderboard"); var context = new Context.ServerContext(); var playerResults = context.Results.GroupBy(grp => grp.playerId).Select(p => new { player = p.Key, results = p }); int[] players = context.Results.Select(p => p.playerId).Distinct().ToArray(); var leaderboard = playerResults.Select(p => new { player = p.player, lastUpdate = p.results.OrderByDescending(r => r.timestamp).Select(r => r.timestamp).FirstOrDefault(), balance = p.results.OrderBy(r => r.timestamp).Sum(r => r.win) }) .OrderByDescending(p => p.balance) .Take(100) .ToArray(); ObjectCache cache = MemoryCache.Default; cache.Remove("leaderboard"); cache.Add("leaderboard", leaderboard, MemoryCache.InfiniteAbsoluteExpiration); Debug.WriteLine(DateTime.Now + " | Finshed updating the leaderboard"); } catch (Exception e) { Debug.WriteLine(DateTime.Now + " | Error while updating Leaderboard: " + e.Message); } }
private void SaveResults() { Debug.WriteLine(DateTime.Now + " | Starting to persist data on DB."); var context = new Context.ServerContext(); ObjectCache cache = MemoryCache.Default; var gameResults = new Result[0]; lock (cache) { gameResults = cache.Get("gameResults") as Result[]; cache.Remove("gameResults"); } if (gameResults == null || gameResults.Length < 1) { Debug.WriteLine(DateTime.Now + " | No data to persist."); return; } gameResults.ToList().ForEach(result => { context.Results.Add(result); }); try { context.SaveChanges(); Debug.WriteLine(DateTime.Now + " | Finished persisting data on DB."); } catch (Exception e) { Debug.WriteLine(DateTime.Now + " | Error while persisting: " + e.Message); } }