getNextProxy method

Future<Proxy?> getNextProxy()

Gets the next proxy from the rotation strategy

Implementation

Future<Proxy?> getNextProxy() async {
  if (_validatedProxies.isEmpty) {
    if (_usePreloadedProxies && _preloaderService != null) {
      // Try to get preloaded proxies
      final preloadedProxies = _preloaderService.getPreloadedProxies();
      if (preloadedProxies.isNotEmpty) {
        _validatedProxies = preloadedProxies;
        _rotationStrategy.updateProxies(_validatedProxies);
      } else {
        // If no preloaded proxies, try to get validated proxies
        try {
          await getValidatedProxies();
        } catch (e) {
          // If we can't get validated proxies, return null
          return null;
        }
      }
    } else {
      // If not using preloaded proxies, try to get validated proxies
      try {
        await getValidatedProxies();
      } catch (e) {
        // If we can't get validated proxies, return null
        return null;
      }
    }
  }

  if (_validatedProxies.isEmpty) {
    return null;
  }

  final proxy = _rotationStrategy.getNextProxy();

  // Track proxy usage
  if (proxy != null && _analyticsService != null) {
    await _analyticsService.recordRequest(proxy, true, null, 'usage');
  }

  return proxy;
}