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); } }
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); } } }
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); } } }