From c41a3dbb0f4a7f2c976012c0561dba5d62ce9dcf Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Thu, 12 Nov 2020 20:51:00 +0800 Subject: [PATCH] fix connection. --- client/client.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/client/client.go b/client/client.go index d5e6d25d..9d15af8a 100644 --- a/client/client.go +++ b/client/client.go @@ -208,8 +208,7 @@ func (c *QQClient) Login() (*LoginResponse, error) { return nil, err } go c.netLoop() - seq, packet := c.buildLoginPacket() - rsp, err := c.sendAndWait(seq, packet) + rsp, err := c.sendAndWait(c.buildLoginPacket()) if err != nil { c.Disconnect() return nil, err @@ -226,6 +225,7 @@ func (c *QQClient) SubmitCaptcha(result string, sign []byte) (*LoginResponse, er seq, packet := c.buildCaptchaPacket(result, sign) rsp, err := c.sendAndWait(seq, packet) if err != nil { + c.Disconnect() return nil, err } l := rsp.(LoginResponse) @@ -238,6 +238,7 @@ func (c *QQClient) SubmitCaptcha(result string, sign []byte) (*LoginResponse, er func (c *QQClient) SubmitSMS(code string) (*LoginResponse, error) { rsp, err := c.sendAndWait(c.buildSMSCodeSubmitPacket(code)) if err != nil { + c.Disconnect() return nil, err } l := rsp.(LoginResponse) @@ -1027,6 +1028,9 @@ func (c *QQClient) sendAndWait(seq uint16, pkt []byte) (interface{}, error) { } func (c *QQClient) netLoop() { + if c.NetLooping { + return + } c.NetLooping = true reader := binary.NewNetworkReader(c.Conn) retry := 0 @@ -1126,11 +1130,12 @@ func (c *QQClient) doHeartbeat() { 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 { - _ = c.Conn.Close() + if err == nil { + time.AfterFunc(30*time.Second, c.doHeartbeat) + return } - time.AfterFunc(30*time.Second, c.doHeartbeat) - return + c.lastLostMsg = "Heartbeat failed" + c.Disconnect() } c.heartbeatEnabled = false }