From c3a477b7049dd6f5b16024dd73830e6b63c75f71 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Wed, 15 May 2024 15:31:08 +0300 Subject: [PATCH] Send extra GET_UPDATES call after disconnections --- libgm/longpoll.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libgm/longpoll.go b/libgm/longpoll.go index f5a57f9..4d062ac 100644 --- a/libgm/longpoll.go +++ b/libgm/longpoll.go @@ -187,19 +187,26 @@ const DefaultBugleDefaultCheckInterval = 2*time.Hour + 55*time.Minute func (dp *dittoPinger) Loop() { for { + var pingStart time.Time select { case <-dp.client.pingShortCircuit: pingID := pingIDCounter.Add(1) dp.log.Debug().Uint64("ping_id", pingID).Msg("Ditto ping wait short-circuited") + pingStart = time.Now() dp.Ping(pingID, shortPingTimeout, 0) case <-dp.ping: pingID := pingIDCounter.Add(1) dp.log.Trace().Uint64("ping_id", pingID).Msg("Doing normal ditto ping") + pingStart = time.Now() dp.Ping(pingID, defaultPingTimeout, 0) case <-dp.stop: return } if dp.client.shouldDoDataReceiveCheck() { + dp.log.Warn().Msg("No data received recently, sending extra GET_UPDATES call") + go dp.HandleNoRecentUpdates() + } else if time.Since(pingStart) > 5*time.Minute { + dp.log.Warn().Msg("Was disconnected for over 5 minutes, sending extra GET_UPDATES call") go dp.HandleNoRecentUpdates() } } @@ -207,7 +214,6 @@ func (dp *dittoPinger) Loop() { func (dp *dittoPinger) HandleNoRecentUpdates() { dp.client.triggerEvent(&events.NoDataReceived{}) - dp.log.Warn().Msg("No data received recently, sending extra GET_UPDATES call") err := dp.client.sessionHandler.sendMessageNoResponse(SendMessageParams{ Action: gmproto.ActionType_GET_UPDATES, OmitTTL: true,