Пример #1
0
        public async Task <string> SendCodeRequest(string phoneNumber, int requestType = 5)
        {
            var completed = false;

            AuthSendCodeRequest request = null;

            while (!completed)
            {
                request = new AuthSendCodeRequest(phoneNumber, requestType, _apiId, _apiHash, "en");
                try
                {
                    await _sender.Send(request);

                    await _sender.Recieve(request);

                    completed = true;
                }
                catch (InvalidOperationException ex)
                {
                    if (ex.Message.StartsWith("Your phone number registered to") && ex.Data["dcId"] != null)
                    {
                        await ReconnectToDc((int)ex.Data["dcId"]);
                    }
                    else
                    {
                        throw;
                    }
                }
            }

            return(request._phoneCodeHash);
        }
Пример #2
0
        public async Task <string> SendCodeRequest(string phoneNumber)
        {
            var request = new AuthSendCodeRequest(phoneNumber, 5, _apiId, _apiHash, "en");
            await _sender.Send(request);

            await _sender.Recieve(request);

            return(request._phoneCodeHash);
        }
Пример #3
0
        //auth.sendCode#768d5f4d phone_number:string sms_type:int api_id:int api_hash:string lang_code:string = auth.SentCode;
        public async Task <AuthSentCode> SendCode(string phoneNumber, VerificationCodeDeliveryType tokenDestination)
        {
            var request = new AuthSendCodeRequest(phoneNumber, (int)tokenDestination, apiId, apiHash, "en");

            await SendRpcRequest(request, false);

            if (request.Error == RpcRequestError.MigrateDataCenter)
            {
                if (request.ErrorMessage.StartsWith("PHONE_MIGRATE_") ||
                    request.ErrorMessage.StartsWith("NETWORK_MIGRATE_") ||
                    request.ErrorMessage.StartsWith("USER_MIGRATE_"))
                {
                    Debug.WriteLine($"Trying to resolve error: {request.ErrorMessage}.");

                    var dcIdStr = Regex.Match(request.ErrorMessage, @"\d+").Value;
                    var dcId    = int.Parse(dcIdStr);

                    // close
                    await CloseProto();

                    // set new dc options
                    var dcOpt = dcOptions.GetDc(dcId);

                    session.authKey       = null;
                    session.serverAddress = dcOpt.ipAddress;
                    session.port          = dcOpt.port;

                    try
                    {
                        Debug.WriteLine($"Reconnecting to dc {dcId} - {dcOpt.ipAddress}");
                        await ReconnectImpl();
                    }
                    catch (Exception)
                    {
                        StartReconnecting().IgnoreAwait();
                        throw;
                    }

                    // try one more time
                    request.ResetError();
                    await SendRpcRequest(request);
                }
            }

            request.ThrowIfHasError();
            return(request.sentCode);
        }