diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs index 126370d..b1aafa1 100644 --- a/TLSharp.Core/TelegramClient.cs +++ b/TLSharp.Core/TelegramClient.cs @@ -85,6 +85,13 @@ namespace TLSharp.Core { if (dcOptions == null || !dcOptions.Any()) throw new InvalidOperationException($"Can't reconnect. Establish initial connection first."); + + TLExportedAuthorization exported = null; + if (_session.TLUser != null) + { + TLRequestExportAuthorization exportAuthorization = new TLRequestExportAuthorization() { DcId = dcId }; + exported = await SendRequestAsync(exportAuthorization); + } var dc = dcOptions.First(d => d.Id == dcId); @@ -92,7 +99,14 @@ namespace TLSharp.Core _session.ServerAddress = dc.IpAddress; _session.Port = dc.Port; - await ConnectAsync(true); + await ConnectAsync(true); + + if (_session.TLUser != null) + { + TLRequestImportAuthorization importAuthorization = new TLRequestImportAuthorization() { Id = exported.Id, Bytes = exported.Bytes }; + var imported = await SendRequestAsync(importAuthorization); + OnUserAuthenticated(((TLUser)imported.User)); + } } private async Task RequestWithDcMigration(TLMethod request) @@ -286,41 +300,12 @@ namespace TLSharp.Core public async Task GetFile(TLAbsInputFileLocation location, int filePartSize, int offset = 0) { TLFile result = null; - try + result = await SendRequestAsync(new TLRequestGetFile() { - result = await SendRequestAsync(new TLRequestGetFile() - { - Location = location, - Limit = filePartSize, - Offset = offset - }); - } - catch (FileMigrationException ex) - { - var exportedAuth = await SendRequestAsync(new TLRequestExportAuthorization() { DcId = ex.DC }); - - var authKey = _session.AuthKey; - var timeOffset = _session.TimeOffset; - var serverAddress = _session.ServerAddress; - var serverPort = _session.Port; - - await ReconnectToDcAsync(ex.DC); - var auth = await SendRequestAsync(new TLRequestImportAuthorization - { - Bytes = exportedAuth.Bytes, - Id = exportedAuth.Id - }); - result = await GetFile(location, filePartSize, offset); - - _session.AuthKey = authKey; - _session.TimeOffset = timeOffset; - _transport = new TcpTransport(serverAddress, serverPort); - _session.ServerAddress = serverAddress; - _session.Port = serverPort; - await ConnectAsync(); - - } - + Location = location, + Limit = filePartSize, + Offset = offset + }); return result; }