public void ChangeProxy(ProxyChangePolicy policy) { rwl.EnterWriteLock(); ProxyInfo newProxy = proxyManager.DequeueFastestProxy(true); ChangeProxy(newProxy, policy); rwl.ExitWriteLock(); }
public void ChangeProxy(ProxyInfo newProxy, ProxyChangePolicy policy) { rwl.EnterWriteLock(); errorTimes = 0; var args = new ProxyUsingChangedEvnetHandlerArgs(); args.OldProxy = currentProxyInfo; if (currentProxyInfo != null) { switch (policy) { case ProxyChangePolicy.TO_PENDING: proxyManager.EnqueuePendingProxy(currentProxyInfo); break; case ProxyChangePolicy.TO_GOOD: proxyManager.EnqueueGoodProxy(currentProxyInfo); break; case ProxyChangePolicy.DELETE: proxyManager.DeleteProxy(currentProxyInfo); break; default: throw new ArgumentOutOfRangeException("policy"); } } currentProxyInfo = newProxy; args.NewProxy = currentProxyInfo; if (currentProxyInfo != null) { IPAddress ip; if (IPAddress.TryParse(currentProxyInfo.HttpProxy.Address.Host, out ip)) { currentProxyIPAddress = new IPAddress[1] { ip }; } else { //host name is not an ip address currentProxyIPAddress = dnsCache.GetIPAddress(currentProxyInfo.HttpProxy.Address.Host); } currentProxyPort = currentProxyInfo.HttpProxy.Address.Port; } else { currentProxyIPAddress = null; currentProxyPort = 80; } if (OnProxyUsingChanged != null) { OnProxyUsingChanged(this, args); } rwl.ExitWriteLock(); }