From 94775cebd81e0a42e7485b236e25efc8fc9db0f9 Mon Sep 17 00:00:00 2001 From: solarin Date: Sun, 12 Apr 2020 02:14:54 +0800 Subject: [PATCH] Core: allow reconnecting same TelegramClient instance Fixes https://github.com/sochix/TLSharp/issues/930 --- src/TgSharp.Core/TelegramClient.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/TgSharp.Core/TelegramClient.cs b/src/TgSharp.Core/TelegramClient.cs index bf0e203..d39f73b 100644 --- a/src/TgSharp.Core/TelegramClient.cs +++ b/src/TgSharp.Core/TelegramClient.cs @@ -28,6 +28,8 @@ namespace TgSharp.Core private TcpTransport transport; private string apiHash = String.Empty; private int apiId = 0; + private string sessionUserId; + private ISessionStore store; private Session session; private List dcOptions; private TcpClientConnectionHandler handler; @@ -58,20 +60,23 @@ namespace TgSharp.Core if (store == null) store = new FileSessionStore(); + this.store = store; this.apiHash = apiHash; this.apiId = apiId; this.handler = handler; this.dcIpVersion = dcIpVersion; - session = Session.TryLoadOrCreateNew(store, sessionUserId); - transport = new TcpTransport (session.DataCenter.Address, session.DataCenter.Port, this.handler); + this.sessionUserId = sessionUserId; } public async Task ConnectAsync(bool reconnect = false, CancellationToken token = default(CancellationToken)) { token.ThrowIfCancellationRequested(); + session = Session.TryLoadOrCreateNew (store, sessionUserId); + transport = new TcpTransport (session.DataCenter.Address, session.DataCenter.Port, this.handler); + if (session.AuthKey == null || reconnect) { var result = await Authenticator.DoAuthentication(transport, token).ConfigureAwait(false); @@ -135,9 +140,8 @@ namespace TgSharp.Core dc = dcs.First(); var dataCenter = new DataCenter (dcId, dc.IpAddress, dc.Port); - - transport = new TcpTransport(dc.IpAddress, dc.Port, handler); session.DataCenter = dataCenter; + session.Save(); await ConnectAsync(true, token).ConfigureAwait(false);