diff --git a/src/TgSharp.Core/TelegramClient.cs b/src/TgSharp.Core/TelegramClient.cs index bf0e203..2a98be9 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,28 @@ 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)) + public async Task ConnectAsync (CancellationToken token = default (CancellationToken)) + { + await ConnectInternalAsync(false, token); + } + + private async Task ConnectInternalAsync (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,11 +145,10 @@ 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); + await ConnectInternalAsync(true, token).ConfigureAwait(false); if (session.TLUser != null) {