From b6a695d43d8e379c89c5b0e8852004122650d706 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Fri, 13 Nov 2020 16:16:13 +0800 Subject: [PATCH] fix heartbeat loop. --- client/client.go | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/client/client.go b/client/client.go index f14e9bf8..e2fc7c00 100644 --- a/client/client.go +++ b/client/client.go @@ -253,7 +253,7 @@ func (c *QQClient) init() { _ = c.registerClient() c.groupSysMsgCache, _ = c.GetGroupSystemMessages() if !c.heartbeatEnabled { - c.startHeartbeat() + go c.doHeartbeat() } } @@ -1041,6 +1041,7 @@ func (c *QQClient) netLoop() { c.Error("connection dropped by server: %v", err) err = c.connect() if err != nil { + c.Error("connect server error: %v", err) break } reader = binary.NewNetworkReader(c.Conn) @@ -1119,23 +1120,19 @@ func (c *QQClient) netLoop() { c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: c.lastLostMsg}) } -func (c *QQClient) startHeartbeat() { - c.heartbeatEnabled = true - time.AfterFunc(30*time.Second, c.doHeartbeat) -} - func (c *QQClient) doHeartbeat() { - if c.Online { + c.heartbeatEnabled = true + for c.Online { seq := c.nextSeq() sso := packets.BuildSsoPacket(seq, c.version.AppId, "Heartbeat.Alive", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, []byte{}, c.ksid) packet := packets.BuildLoginPacket(c.Uin, 0, []byte{}, sso, []byte{}) _, err := c.sendAndWait(seq, packet) - if err == nil { - time.AfterFunc(30*time.Second, c.doHeartbeat) - return + if err != nil { + c.lastLostMsg = "Heartbeat failed: " + err.Error() + c.Disconnect() + break } - c.lastLostMsg = "Heartbeat failed: " + err.Error() - c.Disconnect() + time.Sleep(time.Second * 30) } c.heartbeatEnabled = false }