1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00
This commit is contained in:
Mrs4s 2020-08-17 22:21:35 +08:00
parent 2db3c6339d
commit 47d4fdde60
2 changed files with 12 additions and 11 deletions

View File

@ -59,11 +59,12 @@ type QQClient struct {
sigInfo *loginSigInfo sigInfo *loginSigInfo
pwdFlag bool pwdFlag bool
lastMessageSeq int32 lastMessageSeq int32
lastMessageSeqTmp sync.Map //lastMessageSeqTmp sync.Map
lastLostMsg string lastLostMsg string
groupMsgBuilders sync.Map groupMsgBuilders sync.Map
onlinePushCache []int16 // reset on reconnect onlinePushCache []int16 // reset on reconnect
msgSvcCache *utils.Cache
requestPacketRequestId int32 requestPacketRequestId int32
groupSeq int32 groupSeq int32
friendSeq int32 friendSeq int32
@ -139,6 +140,7 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient {
ksid: []byte("|454001228437590|A8.2.7.27f6ea96"), ksid: []byte("|454001228437590|A8.2.7.27f6ea96"),
eventHandlers: &eventHandlers{}, eventHandlers: &eventHandlers{},
groupListLock: new(sync.Mutex), groupListLock: new(sync.Mutex),
msgSvcCache: utils.NewCache(time.Second * 5),
} }
rand.Read(cli.RandomKey) rand.Read(cli.RandomKey)
return cli return cli

View File

@ -165,6 +165,13 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
if message.Head.ToUin != c.Uin { if message.Head.ToUin != c.Uin {
continue continue
} }
if message.Head.MsgType != 166 {
strSeq := strconv.FormatInt(int64(message.Head.MsgSeq), 10)
if _, ok := c.msgSvcCache.Get(strSeq); ok {
continue
}
c.msgSvcCache.Add(strSeq, 0, time.Minute*15)
}
switch message.Head.MsgType { switch message.Head.MsgType {
case 33: // 加群同步 case 33: // 加群同步
groupJoinLock.Lock() groupJoinLock.Lock()
@ -210,15 +217,7 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
if mem == nil || message.Head.FromUin == c.Uin { if mem == nil || message.Head.FromUin == c.Uin {
continue continue
} }
lastSeq, ok := c.lastMessageSeqTmp.Load(mem.Uin) c.dispatchTempMessage(c.parseTempMessage(message))
if !ok {
c.lastMessageSeqTmp.Store(mem.Uin, int32(-1))
lastSeq = int32(-1)
}
if message.Head.MsgSeq > lastSeq.(int32) {
c.lastMessageSeqTmp.Store(mem.Uin, message.Head.MsgSeq)
c.dispatchTempMessage(c.parseTempMessage(message))
}
case 166: // 好友消息 case 166: // 好友消息
if message.Head.FromUin == c.Uin { if message.Head.FromUin == c.Uin {
for { for {