Exemplo n.º 1
0
        private void GetGameUpdates()
        {
            var activeGames = allGameSummaries
                              .Where(a =>
                                     //a.Id == ""
                                     a.Status?.Status != "F" &&
                                     a.Status?.Status != "Final" &&
                                     a.DateObjUtc.AddMinutes(-15) < DateTime.UtcNow).ToList();

            var gamesToBroadcast = new List <int>();

            Logger.Log($"Total games: {allGameSummaries.Count}, Active games: {activeGames.Count}");

            foreach (var game in activeGames)
            {
                var gdc                = new GameDetailCreator(game.GameDataDirectory);
                var headers            = gdc.GetGameCenterHeaders();
                var lastModifiedHeader = headers.TryGetValueOrDefault("Last-Modified");
                if (lastModifiedHeader != null)
                {
                    var lastModified = DateTime.Parse(lastModifiedHeader).ToUniversalTime();
                    if (lastModified > this.lastCheckedDate)
                    {
                        gamesToBroadcast.Add(game.GamePk);
                    }
                }
            }

            if (gamesToBroadcast.Count > 0)
            {
                Logger.Log($"Broadcasting updates for {string.Join(",", gamesToBroadcast)}");
                this.onUpdateGames(gamesToBroadcast);
            }

            if (!activeGames.Any())
            {
                //End();
                var now      = DateTime.UtcNow;
                var tomorrow = now.AddDays(1).Date;

                this.StartCheckDelay(tomorrow - now);
            }
            else
            {
                checkGamesTimer = new Timer((a) => CheckGames(), null, 10 * 1000, 0);
            }

            this.lastCheckedDate = DateTime.UtcNow;
        }