/// <summary> /// /// </summary> /// <param name="searchEngineId"></param> /// <param name="regionId"></param> /// <param name="proxyId"></param> /// <returns></returns> private Proxy CreateProxyDetails(short searchEngineId, short regionId, int proxyId) { Data.Entities.Proxy proxy = _proxyRepo.Select(proxyId); // proxy id return(new Proxy { ProxyID = proxy.ID, IP = proxy.IP, Port = proxy.Port, SearchEngineID = searchEngineId, RegionID = regionId }); }
/// <summary> /// All methods that make use of the _proxyStatus dictionary /// should call this method prior. /// </summary> private void InitializeProxyStatuses() { Log.Information("Initializing Proxy Statuses"); // create search engine, region, proxy tuples IEnumerable <Data.Entities.SearchEngine> searchEngines = _searchEngineRepo.SelectAll(); List <Data.Entities.Proxy> proxies = _proxyRepo.SelectAll().ToList(); // shuffle int n = proxies.Count(); for (int i = n - 1; i >= 1; i--) { int j = _random.Next(0, i); Data.Entities.Proxy temp = proxies[i]; proxies[i] = proxies[j]; proxies[j] = temp; } foreach (var searchEngine in searchEngines) { foreach (var proxy in proxies) { Tuple <short, short> key = new Tuple <short, short>(searchEngine.ID, proxy.RegionID); if (!_proxyStatuses.ContainsKey(key)) { _proxyStatuses[key] = new Dictionary <int, ProxyStatus>(); } _proxyStatuses[key].Add(proxy.ID, new ProxyStatus { IsLocked = false, // forces slow start, but proxies will now be naturally distributed NextAvailability = new DateTime( DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, 0).AddSeconds( _random.Next(START_LOWER_BOUND, START_UPPER_BOUND)) }); } } _addedInitStatuses = true; }