Esempio n. 1
0
        /// <summary>
        /// Tries to return the first available proxy from the list.
        /// </summary>
        /// <param name="evenBusy">Whether to include proxies that are being used by other bots</param>
        /// <param name="maxUses">The maximum uses of a proxy, after which it will be banned (0 for infinite)</param>
        /// <param name="neverBan">Whether a proxy can ever be banned</param>
        /// <returns>The first available proxy respecting the conditions or null</returns>
        public CProxy GetProxy(bool evenBusy, int maxUses, bool neverBan = false)
        {
            while (Locked)
            {
                Thread.Sleep(10);
            }

            CProxy proxy;

            Locked = true;
            if (evenBusy)
            {
                if (maxUses == 0)
                {
                    proxy = Alive.FirstOrDefault();
                }
                else
                {
                    proxy = Alive.Where(p => p.Uses < maxUses).FirstOrDefault();
                }
            }
            else
            {
                if (maxUses == 0)
                {
                    proxy = Available.FirstOrDefault();
                }
                else
                {
                    proxy = Available.Where(p => p.Uses < maxUses).FirstOrDefault();
                }
            }

            if (proxy != null)
            {
                if (maxUses > 0 && proxy.Uses > maxUses && !neverBan)
                {
                    proxy.Status = Status.BANNED;
                    Locked       = false;
                    return(null);
                }
                else
                {
                    proxy.Status = Status.BUSY;
                    proxy.Hooked++;
                }
            }
            Locked = false;
            return(proxy);
        }