Пример #1
0
 public ServerList(ISupportServers game, UserSettings settings, IEventAggregator eventBus,
                   IGameServerQueryHandler queryHandler, IGameContext gameContext)
 {
     _eventBus        = eventBus;
     _queryHandler    = queryHandler;
     _gameContext     = gameContext;
     _settings        = settings;
     _listTimer       = new TimerWithElapsedCancellationAsync(GetTimerValue(), ListTimerElapsed, null);
     _serverTimer     = new TimerWithElapsedCancellationAsync(ServerUpdateFrequency, ServerTimerElapsed);
     Game             = game;
     Filter           = Game.GetServerFilter();
     ServerQueryQueue = new ServerQueryQueue();
 }
Пример #2
0
        async Task SyncAndProcess()
        {
            var ms            = ((Game)Game).CalculatedSettings.Collection;
            var moddingFilter = Filter as IHaveModdingFilters;
            var servers       = moddingFilter == null ||
                                (ms == null && !moddingFilter.Modded && !moddingFilter.IncompatibleServers)
                ? Items.ToArray()
                : Items.Where(server => server.HasMod(ms, moddingFilter.Modded, moddingFilter.IncompatibleServers))
                                .ToArray();

            if (!servers.Any())
            {
                return;
            }
            using (_cancellationToken = new CancellationTokenSource()) {
                await ServerQueryQueue.SyncAsync(servers, _cancellationToken.Token).ConfigureAwait(false);

                _cancellationToken = null;
            }
        }
Пример #3
0
        async Task UpdateAllInternal()
        {
#if DEBUG
            var sw = new Stopwatch();
            sw.Start();
#endif
            var queue = new ServerQueryQueue();
            ServerQueryQueue = queue;

            try {
                await SyncAndProcess().ConfigureAwait(false);
            } finally {
#if DEBUG
                sw.Stop();
                this.Logger().Debug(
                    "Done processing servers: {0} (Canceled: {1}, TotalSI: {2}). Took: {3}s",
                    queue.State.Progress, queue.State.Canceled,
                    TotalCount,
                    sw.Elapsed.TotalSeconds);
#endif
                _eventBus.PublishOnCurrentThread(new ServersUpdated());
            }
        }