コード例 #1
0
ファイル: ProxyWorker.cs プロジェクト: vsoff/cashlog-bot
        private async Task RevalidateProxy()
        {
            var client = new WebClient();

            _logger.Trace($"{GetType().Name}: Запущена проверка работоспособности прокси-сервера...");

            // Проверяем работоспособность текущего прокси-сервера.
            var settings     = _cashlogSettingsService.ReadSettings();
            var currentProxy = string.IsNullOrEmpty(settings.ProxyAddress) ? null : new WebProxy(settings.ProxyAddress);

            if (IsProxyWorks(currentProxy, client))
            {
                _logger.Trace($"{GetType().Name}: Текущий прокси-сервер работает!");
                SetNewProxy(currentProxy, _lastWorkingWebProxy);
                return;
            }

            _logger.Trace($"{GetType().Name}: Текущий прокси-сервер больше не работает!");

            // Иначе, проверяем закешированные прокси сервера.
            _logger.Trace($"{GetType().Name}: Проверяем закешированные прокси-сервера. Количество серверов: {_cachedProxies.Count}");
            var workingCachedProxy = GetWorksProxies(_cachedProxies, client).FirstOrDefault();

            if (workingCachedProxy != null)
            {
                SetNewProxy(workingCachedProxy, currentProxy);
                return;
            }

            // Среди закешированных нету работающего. Получаем прокси сервера от провайдера.
            _logger.Trace($"{GetType().Name}: Получаем прокси-сервера от провайдера...");
            var proxies = await _proxyProvider.GetProxiesAsync();

            if (proxies == null || proxies.Count == 0)
            {
                _logger.Warning($"{GetType().Name}: От провадйера не было получено ни одного прокси-сервера");
                SetNewProxy(null, currentProxy);
                return;
            }

            _logger.Trace($"{GetType().Name}: От провадйера было получено {proxies.Count} прокси-серверов");

            // Проверяем прокси, полученные от провайдера.
            var newProxies   = new Queue <WebProxy>(proxies);
            var workingProxy = GetWorksProxies(newProxies, client).FirstOrDefault();

            SetNewProxy(workingProxy, currentProxy);

            _cachedProxies = newProxies;
        }