Example #1
0
        public void ChangeProxy(ProxyChangePolicy policy)
        {
            rwl.EnterWriteLock();
            ProxyInfo newProxy = proxyManager.DequeueFastestProxy(true);

            ChangeProxy(newProxy, policy);
            rwl.ExitWriteLock();
        }
Example #2
0
        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();
        }