mirror of
https://github.com/sochix/TLSharp.git
synced 2025-12-06 08:02:00 +01:00
Handle DataCenterMigration exceptions in all methods exposed by TelegramClient
This handles the data center migration in more cases. Fixes bugs like mentioned in #599.
This commit is contained in:
parent
0015cf494b
commit
3ba3ea53fd
|
|
@ -95,6 +95,24 @@ namespace TLSharp.Core
|
||||||
await ConnectAsync(true);
|
await ConnectAsync(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task RequestWithDcMigration(TLMethod request)
|
||||||
|
{
|
||||||
|
var completed = false;
|
||||||
|
while(!completed)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _sender.Send(request);
|
||||||
|
await _sender.Receive(request);
|
||||||
|
completed = true;
|
||||||
|
}
|
||||||
|
catch(DataCenterMigrationException e)
|
||||||
|
{
|
||||||
|
await ReconnectToDcAsync(e.DC);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsUserAuthorized()
|
public bool IsUserAuthorized()
|
||||||
{
|
{
|
||||||
return _session.TLUser != null;
|
return _session.TLUser != null;
|
||||||
|
|
@ -109,20 +127,9 @@ namespace TLSharp.Core
|
||||||
throw new InvalidOperationException("Not connected!");
|
throw new InvalidOperationException("Not connected!");
|
||||||
|
|
||||||
var authCheckPhoneRequest = new TLRequestCheckPhone() { phone_number = phoneNumber };
|
var authCheckPhoneRequest = new TLRequestCheckPhone() { phone_number = phoneNumber };
|
||||||
var completed = false;
|
|
||||||
while(!completed)
|
await RequestWithDcMigration(authCheckPhoneRequest);
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await _sender.Send(authCheckPhoneRequest);
|
|
||||||
await _sender.Receive(authCheckPhoneRequest);
|
|
||||||
completed = true;
|
|
||||||
}
|
|
||||||
catch(PhoneMigrationException e)
|
|
||||||
{
|
|
||||||
await ReconnectToDcAsync(e.DC);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return authCheckPhoneRequest.Response.phone_registered;
|
return authCheckPhoneRequest.Response.phone_registered;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -131,25 +138,9 @@ namespace TLSharp.Core
|
||||||
if (String.IsNullOrWhiteSpace(phoneNumber))
|
if (String.IsNullOrWhiteSpace(phoneNumber))
|
||||||
throw new ArgumentNullException(nameof(phoneNumber));
|
throw new ArgumentNullException(nameof(phoneNumber));
|
||||||
|
|
||||||
var completed = false;
|
var request = new TLRequestSendCode() { phone_number = phoneNumber, api_id = _apiId, api_hash = _apiHash };
|
||||||
|
|
||||||
TLRequestSendCode request = null;
|
await RequestWithDcMigration(request);
|
||||||
|
|
||||||
while (!completed)
|
|
||||||
{
|
|
||||||
request = new TLRequestSendCode() { phone_number = phoneNumber, api_id = _apiId, api_hash = _apiHash };
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await _sender.Send(request);
|
|
||||||
await _sender.Receive(request);
|
|
||||||
|
|
||||||
completed = true;
|
|
||||||
}
|
|
||||||
catch (DataCenterMigrationException ex)
|
|
||||||
{
|
|
||||||
await ReconnectToDcAsync(ex.DC);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return request.Response.phone_code_hash;
|
return request.Response.phone_code_hash;
|
||||||
}
|
}
|
||||||
|
|
@ -167,32 +158,18 @@ namespace TLSharp.Core
|
||||||
|
|
||||||
var request = new TLRequestSignIn() { phone_number = phoneNumber, phone_code_hash = phoneCodeHash, phone_code = code };
|
var request = new TLRequestSignIn() { phone_number = phoneNumber, phone_code_hash = phoneCodeHash, phone_code = code };
|
||||||
|
|
||||||
var completed = false;
|
await RequestWithDcMigration(request);
|
||||||
|
|
||||||
while (!completed)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await _sender.Send(request);
|
|
||||||
await _sender.Receive(request);
|
|
||||||
completed = true;
|
|
||||||
}
|
|
||||||
catch (PhoneMigrationException e)
|
|
||||||
{
|
|
||||||
await ReconnectToDcAsync(e.DC);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
OnUserAuthenticated(((TLUser)request.Response.user));
|
OnUserAuthenticated(((TLUser)request.Response.user));
|
||||||
|
|
||||||
return ((TLUser)request.Response.user);
|
return ((TLUser)request.Response.user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<TLPassword> GetPasswordSetting()
|
public async Task<TLPassword> GetPasswordSetting()
|
||||||
{
|
{
|
||||||
var request = new TLRequestGetPassword();
|
var request = new TLRequestGetPassword();
|
||||||
|
|
||||||
await _sender.Send(request);
|
await RequestWithDcMigration(request);
|
||||||
await _sender.Receive(request);
|
|
||||||
|
|
||||||
return ((TLPassword)request.Response);
|
return ((TLPassword)request.Response);
|
||||||
}
|
}
|
||||||
|
|
@ -207,8 +184,8 @@ namespace TLSharp.Core
|
||||||
var password_hash = hashstring.ComputeHash(rv.ToArray());
|
var password_hash = hashstring.ComputeHash(rv.ToArray());
|
||||||
|
|
||||||
var request = new TLRequestCheckPassword() { password_hash = password_hash };
|
var request = new TLRequestCheckPassword() { password_hash = password_hash };
|
||||||
await _sender.Send(request);
|
|
||||||
await _sender.Receive(request);
|
await RequestWithDcMigration(request);
|
||||||
|
|
||||||
OnUserAuthenticated(((TLUser)request.Response.user));
|
OnUserAuthenticated(((TLUser)request.Response.user));
|
||||||
|
|
||||||
|
|
@ -218,8 +195,8 @@ namespace TLSharp.Core
|
||||||
public async Task<TLUser> SignUpAsync(string phoneNumber, string phoneCodeHash, string code, string firstName, string lastName)
|
public async Task<TLUser> SignUpAsync(string phoneNumber, string phoneCodeHash, string code, string firstName, string lastName)
|
||||||
{
|
{
|
||||||
var request = new TLRequestSignUp() { phone_number = phoneNumber, phone_code = code, phone_code_hash = phoneCodeHash, first_name = firstName, last_name = lastName };
|
var request = new TLRequestSignUp() { phone_number = phoneNumber, phone_code = code, phone_code_hash = phoneCodeHash, first_name = firstName, last_name = lastName };
|
||||||
await _sender.Send(request);
|
|
||||||
await _sender.Receive(request);
|
await RequestWithDcMigration(request);
|
||||||
|
|
||||||
OnUserAuthenticated(((TLUser)request.Response.user));
|
OnUserAuthenticated(((TLUser)request.Response.user));
|
||||||
|
|
||||||
|
|
@ -227,8 +204,7 @@ namespace TLSharp.Core
|
||||||
}
|
}
|
||||||
public async Task<T> SendRequestAsync<T>(TLMethod methodToExecute)
|
public async Task<T> SendRequestAsync<T>(TLMethod methodToExecute)
|
||||||
{
|
{
|
||||||
await _sender.Send(methodToExecute);
|
await RequestWithDcMigration(methodToExecute);
|
||||||
await _sender.Receive(methodToExecute);
|
|
||||||
|
|
||||||
var result = methodToExecute.GetType().GetProperty("Response").GetValue(methodToExecute);
|
var result = methodToExecute.GetType().GetProperty("Response").GetValue(methodToExecute);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue