diff --git a/client/c2c_processor.go b/client/c2c_processor.go index cca8c559..8753a0a5 100644 --- a/client/c2c_processor.go +++ b/client/c2c_processor.go @@ -153,7 +153,9 @@ func (c *QQClient) c2cMessageSyncProcessor(rsp *msg.GetMessageResponse, info *in */ } } - _, _ = c.sendAndWait(c.buildDeleteMessageRequestPacket(delItems)) + if delItems != nil { + _, _ = c.sendAndWait(c.buildDeleteMessageRequestPacket(delItems)) + } if rsp.GetSyncFlag() != msg.SyncFlag_STOP { c.Debug("continue sync with flag: %v", rsp.SyncFlag.String()) seq, pkt := c.buildGetMessageRequestPacket(rsp.GetSyncFlag(), time.Now().Unix()) diff --git a/client/sync.go b/client/sync.go index ffa3833f..dba3c2df 100644 --- a/client/sync.go +++ b/client/sync.go @@ -73,19 +73,13 @@ func (c *QQClient) RefreshStatus() error { } func (c *QQClient) SyncSessions() (*SessionSyncResponse, error) { - _, pkt := c.buildSyncMsgRequestPacket() - if err := c.send(pkt); err != nil { - return nil, err - } ret := &SessionSyncResponse{} notifyChan := make(chan bool) var groupNum int32 = -1 - p := 0 stop := c.waitPacket("RegPrxySvc.PbSyncMsg", func(i interface{}, err error) { if err != nil { return } - p++ e := i.(*sessionSyncEvent) if len(e.GroupSessions) > 0 { ret.GroupSessions = append(ret.GroupSessions, e.GroupSessions...) @@ -93,14 +87,20 @@ func (c *QQClient) SyncSessions() (*SessionSyncResponse, error) { if e.GroupNum != -1 { groupNum = e.GroupNum } + c.Debug("sync session %v/%v", len(ret.GroupSessions), groupNum) if groupNum != -1 && len(ret.GroupSessions) >= int(groupNum) { notifyChan <- true } }) + _, pkt := c.buildSyncMsgRequestPacket() + if err := c.send(pkt); err != nil { + stop() + return nil, err + } select { case <-notifyChan: stop() - case <-time.After(time.Second * 20): + case <-time.After(time.Second * 3): stop() } return ret, nil