VkNet.VkApi.AuthorizeWithAntiCaptcha C# (CSharp) Method

AuthorizeWithAntiCaptcha() private method

Авторизация и получение токена
private AuthorizeWithAntiCaptcha ( ulong appId, string emailOrPhone, string password, Utils.Settings, settings, Func code, long captchaSid = null, string captchaKey = null, string host = null, int port = null, string proxyLogin = null, string proxyPassword = null ) : void
appId ulong Идентификатор приложения
emailOrPhone string Email или телефон
password string Пароль
settings Utils.Settings, Права доступа для приложения
code Func Делегат получения кода для двух факторной авторизации
captchaSid long Идентификатор капчи
captchaKey string Текст капчи
host string Имя узла прокси-сервера.
port int Номер порта используемого Host.
proxyLogin string Логин для прокси-сервера.
proxyPassword string Пароль для прокси-сервера
return void
        private void AuthorizeWithAntiCaptcha(ulong appId, string emailOrPhone, string password, Settings settings, Func<string> code, long? captchaSid = null, string captchaKey = null,
							   string host = null, int? port = null, string proxyLogin = null, string proxyPassword = null)
        {
            if (_captchaSolver == null)
            {
                Authorize(appId, emailOrPhone, password, settings, code, captchaSid, captchaKey, host, port, proxyLogin, proxyPassword);
            }
            else
            {
                var numberOfRemainingAttemptsToSolveCaptcha = MaxCaptchaRecognitionCount;
                var numberOfRemainingAttemptsToAuthorize = MaxCaptchaRecognitionCount + 1;
                var captchaSidTemp = captchaSid;
                var captchaKeyTemp = captchaKey;
                var authorizationCompleted = false;

                do
                {
                    try
                    {
                        numberOfRemainingAttemptsToAuthorize--;
                        Authorize(appId, emailOrPhone, password, settings, code, captchaSidTemp, captchaKeyTemp, host, port, proxyLogin, proxyPassword);

                        authorizationCompleted = true;
                    }
                    catch (CaptchaNeededException captchaNeededException)
                    {
                        // Если мы обрабатываем исключение не первый раз, сообщаем решателю капчи
                        // об ошибке распознавания предыдущей капчи
                        if (numberOfRemainingAttemptsToSolveCaptcha < MaxCaptchaRecognitionCount)
                        {
                            _captchaSolver?.CaptchaIsFalse();
                        }

                        if (numberOfRemainingAttemptsToSolveCaptcha <= 0)
                        {
                            continue;
                        }
                        captchaSidTemp = captchaNeededException.Sid;
                        captchaKeyTemp = _captchaSolver?.Solve(captchaNeededException.Img?.AbsoluteUri);
                        numberOfRemainingAttemptsToSolveCaptcha--;
                    }
                } while (numberOfRemainingAttemptsToAuthorize > 0 && !authorizationCompleted);

                // Повторно выбрасываем исключение, если капча ни разу не была распознана верно
                if (!authorizationCompleted && captchaSidTemp.HasValue)
                {
                    throw new CaptchaNeededException(captchaSidTemp.Value, captchaKeyTemp);
                }
            }
        }