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);
            }
        }
Пример #2
0
        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);
            }
        }