From 05a9aca537a9420244860374da6b56731f483637 Mon Sep 17 00:00:00 2001 From: bodqhrohro Date: Tue, 17 Dec 2019 03:56:11 +0200 Subject: [PATCH] Reconnect fix --- telegram/connect.go | 10 +++++++--- telegram/handlers.go | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/telegram/connect.go b/telegram/connect.go index 3827bcc..3a711c2 100644 --- a/telegram/connect.go +++ b/telegram/connect.go @@ -146,6 +146,7 @@ func (c *Client) Disconnect() { _, err := c.client.Close() if err != nil { log.Errorf("Couldn't close the Telegram instance: %v; %#v", err, c) + c.forceClose() } } @@ -198,13 +199,16 @@ func (c *Client) interactor() { } gateway.SendPresence(c.xmpp, c.jid, gateway.SPStatus("Logged in "+c.Session.Login)) - case client.TypeAuthorizationStateClosed: - log.Warn("Closing the updates listener") - c.listener.Close() + + return } } } +func (c *Client) forceClose() { + c.listener.Close() +} + // Online checks if the updates listener is alive func (c *Client) Online() bool { return c.listener != nil && c.listener.IsActive() diff --git a/telegram/handlers.go b/telegram/handlers.go index d6aba94..d6b945f 100644 --- a/telegram/handlers.go +++ b/telegram/handlers.go @@ -90,6 +90,12 @@ func (c *Client) updateHandler() { } c.updateFile(typedUpdate) log.Debugf("%#v", typedUpdate.File) + case client.TypeUpdateAuthorizationState: + typedUpdate, ok := update.(*client.UpdateAuthorizationState) + if !ok { + uhOh() + } + c.updateAuthorizationState(typedUpdate) default: // log only handled types continue @@ -242,3 +248,13 @@ func (c *Client) updateFile(update *client.UpdateFile) { log.Errorf("Error creating symlink: %v", err) } } + +func (c *Client) updateAuthorizationState(update *client.UpdateAuthorizationState) { + switch update.AuthorizationState.AuthorizationStateType() { + case client.TypeAuthorizationStateClosing: + log.Warn("Closing the updates listener") + case client.TypeAuthorizationStateClosed: + log.Warn("Closed the updates listener") + c.forceClose() + } +}