From 298c1bb9119f325fddf0d146956826c1986809b0 Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Thu, 30 Jul 2020 19:38:50 +0800 Subject: [PATCH] fix bug. --- client/client.go | 9 ++++++--- client/decoders.go | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/client/client.go b/client/client.go index a88a6367..ea463958 100644 --- a/client/client.go +++ b/client/client.go @@ -58,6 +58,7 @@ type QQClient struct { lastMessageSeq int32 lastMessageSeqTmp sync.Map + lastLostMsg string groupMsgBuilders sync.Map onlinePushCache []int16 // reset on reconnect requestPacketRequestId int32 @@ -152,6 +153,7 @@ func (c *QQClient) Login() (*LoginResponse, error) { } l := rsp.(LoginResponse) if l.Success { + c.lastLostMsg = "" c.registerClient() go c.heartbeat() _, _ = c.sendAndWait(c.buildGetMessageRequestPacket(msg.SyncFlag_START, time.Now().Unix())) @@ -693,8 +695,6 @@ func (c *QQClient) loop() { if err == io.EOF || err == io.ErrClosedPipe { err = c.connect() if err != nil { - c.Online = false - c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: "Connection lost."}) break } reader = binary.NewNetworkReader(c.Conn) @@ -705,7 +705,6 @@ func (c *QQClient) loop() { time.Sleep(time.Second * 3) if retry > 10 { c.Online = false - c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: "Connection lost."}) } continue } @@ -749,6 +748,10 @@ func (c *QQClient) loop() { }() } _ = c.Conn.Close() + if c.lastLostMsg == "" { + c.lastLostMsg = "Connection lost." + } + c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: c.lastLostMsg}) } func (c *QQClient) heartbeat() { diff --git a/client/decoders.go b/client/decoders.go index 3730af50..bb712f3c 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -666,16 +666,16 @@ func decodeForceOfflinePacket(c *QQClient, _ uint16, payload []byte) (interface{ r := jce.NewJceReader(data.Map["req_PushForceOffline"]["PushNotifyPack.RequestPushForceOffline"][1:]) tips := r.ReadString(2) if c.Online { + c.lastLostMsg = tips c.Online = false - c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: tips}) } return nil, nil } func decodeMSFOfflinePacket(c *QQClient, _ uint16, _ []byte) (interface{}, error) { if c.Online { + c.lastLostMsg = "服务器端强制下线." c.Online = false - c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: "服务器端强制下线."}) } return nil, nil }