public async Task <IFile> GetFile(IInputFileLocation location, int offset = 0)
        {
            int filePartSize;

            if (location is TInputDocumentFileLocation)
            {
                filePartSize = DownloadDocumentPartSize;
            }
            else
            {
                filePartSize = DownloadPhotoPartSize;
            }

            try
            {
                return(await SenderService.SendRequestAsync(
                           new RequestGetFile
                {
                    Location = location,
                    Limit = filePartSize,
                    Offset = offset
                }).ConfigureAwait(false));
            }
            catch (FileMigrationException ex)
            {
                var exportedAuth = (TExportedAuthorization)await SenderService.SendRequestAsync(
                    new RequestExportAuthorization
                {
                    DcId = ex.Dc
                }).ConfigureAwait(false);

                var authKey       = ClientSettings.Session.AuthKey;
                var timeOffset    = ClientSettings.Session.TimeOffset;
                var serverAddress = ClientSettings.Session.ServerAddress;
                var serverPort    = ClientSettings.Session.Port;

                await ConnectApiService.ReconnectToDcAsync(ex.Dc).ConfigureAwait(false);

                await SenderService.SendRequestAsync(
                    new RequestImportAuthorization
                {
                    Bytes = exportedAuth.Bytes,
                    Id    = exportedAuth.Id
                }).ConfigureAwait(false);

                var result = await GetFile(location, offset).ConfigureAwait(false);

                ClientSettings.Session.AuthKey       = authKey;
                ClientSettings.Session.TimeOffset    = timeOffset;
                ClientSettings.Session.ServerAddress = serverAddress;
                ClientSettings.Session.Port          = serverPort;
                await ConnectApiService.ConnectAsync().ConfigureAwait(false);

                return(result);
            }
        }
示例#2
0
        public async Task <ICheckedPhone> IsPhoneRegisteredAsync(string phoneNumber)
        {
            Guard.That(phoneNumber, nameof(phoneNumber)).IsNotNullOrWhiteSpace();

            var authCheckPhoneRequest = new RequestCheckPhone
            {
                PhoneNumber = phoneNumber
            };

            while (true)
            {
                try
                {
                    return(await SenderService.SendRequestAsync(authCheckPhoneRequest).ConfigureAwait(false));
                }
                catch (PhoneMigrationException e)
                {
                    await ConnectApiService.ReconnectToDcAsync(e.Dc).ConfigureAwait(false);
                }
            }
        }
示例#3
0
        public async Task <ISentCode> SendCodeRequestAsync(string phoneNumber)
        {
            Guard.That(phoneNumber, nameof(phoneNumber)).IsNotNullOrWhiteSpace();

            var request = new RequestSendCode
            {
                PhoneNumber = phoneNumber,
                ApiId       = ClientSettings.AppId,
                ApiHash     = ClientSettings.AppHash
            };

            while (true)
            {
                try
                {
                    return(await SenderService.SendRequestAsync(request).ConfigureAwait(false));
                }
                catch (PhoneMigrationException ex)
                {
                    await ConnectApiService.ReconnectToDcAsync(ex.Dc).ConfigureAwait(false);
                }
            }
        }