From 7a6c0df081af781546ca10e4b5098fdc20cf2ca9 Mon Sep 17 00:00:00 2001 From: Lin <767763591@qq.com> Date: Wed, 27 Oct 2021 09:35:23 +0800 Subject: [PATCH] =?UTF-8?q?tidy:=20=E5=B0=86c2cDecoders=20switch=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/c2c_decoders.go | 33 +++++++++++++++++++++++++++++++++ client/c2c_processor.go | 41 +++-------------------------------------- client/decoders.go | 17 ++++++++++------- 3 files changed, 46 insertions(+), 45 deletions(-) create mode 100644 client/c2c_decoders.go diff --git a/client/c2c_decoders.go b/client/c2c_decoders.go new file mode 100644 index 00000000..0d0272da --- /dev/null +++ b/client/c2c_decoders.go @@ -0,0 +1,33 @@ +//go:build ignore +// +build ignore + +package client + +import "github.com/Mrs4s/MiraiGo/client/pb/msg" + +var privateMsgDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){ + 9: privateMessageDecoder, 10: privateMessageDecoder, 31: privateMessageDecoder, + 79: privateMessageDecoder, 97: privateMessageDecoder, 120: privateMessageDecoder, + 132: privateMessageDecoder, 133: privateMessageDecoder, 166: privateMessageDecoder, + 167: privateMessageDecoder, 140: tempSessionDecoder, 141: tempSessionDecoder, + 208: privatePttDecoder, +} + +var nonSvcNotifyTroopSystemMsgDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){ + 36: troopSystemMessageDecoder, 85: troopSystemMessageDecoder, +} + +var troopSystemMsgDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){ + 35: troopSystemMessageDecoder, 37: troopSystemMessageDecoder, + 45: troopSystemMessageDecoder, 46: troopSystemMessageDecoder, 84: troopSystemMessageDecoder, + 86: troopSystemMessageDecoder, 87: troopSystemMessageDecoder, +} // IsSvcNotify + +var sysMsgDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){ + 187: systemMessageDecoder, 188: systemMessageDecoder, 189: systemMessageDecoder, + 190: systemMessageDecoder, 191: systemMessageDecoder, +} // IsSvcNotify + +var otherDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){ + 33: troopAddMemberBroadcastDecoder, 529: msgType0x211Decoder, +} diff --git a/client/c2c_processor.go b/client/c2c_processor.go index bcc447c2..a6278b25 100644 --- a/client/c2c_processor.go +++ b/client/c2c_processor.go @@ -1,5 +1,7 @@ package client +//go:generate go run c2c_switcher.go + import ( "fmt" "sync/atomic" @@ -13,31 +15,6 @@ import ( "google.golang.org/protobuf/proto" ) -var privateMsgDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){ - 9: privateMessageDecoder, 10: privateMessageDecoder, 31: privateMessageDecoder, - 79: privateMessageDecoder, 97: privateMessageDecoder, 120: privateMessageDecoder, - 132: privateMessageDecoder, 133: privateMessageDecoder, 166: privateMessageDecoder, - 167: privateMessageDecoder, 140: tempSessionDecoder, 141: tempSessionDecoder, - 208: privatePttDecoder, -} - -var troopSystemMsgDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){ - 35: troopSystemMessageDecoder, 36: troopSystemMessageDecoder, 37: troopSystemMessageDecoder, - 45: troopSystemMessageDecoder, 46: troopSystemMessageDecoder, 84: troopSystemMessageDecoder, - 85: troopSystemMessageDecoder, 86: troopSystemMessageDecoder, 87: troopSystemMessageDecoder, -} - -var sysMsgDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){ - 187: systemMessageDecoder, 188: systemMessageDecoder, 189: systemMessageDecoder, - 190: systemMessageDecoder, 191: systemMessageDecoder, -} - -var otherDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){ - 33: troopAddMemberBroadcastDecoder, 529: msgType0x211Decoder, -} - -var c2cDecoders = map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo){} - type ( TempSessionInfo struct { Source TempSessionSource @@ -62,18 +39,6 @@ const ( AddressBookSource TempSessionSource = 9 // 来自通讯录 ) -func init() { - merge := func(m map[int32]func(*QQClient, *msg.Message, *incomingPacketInfo)) { - for k, v := range m { - c2cDecoders[k] = v - } - } - merge(privateMsgDecoders) - merge(troopSystemMsgDecoders) - merge(sysMsgDecoders) - merge(otherDecoders) -} - func (c *QQClient) c2cMessageSyncProcessor(rsp *msg.GetMessageResponse, info *incomingPacketInfo) { c.syncCookie = rsp.SyncCookie c.pubAccountCookie = rsp.PubAccountCookie @@ -127,7 +92,7 @@ func (c *QQClient) commMsgProcessor(pMsg *msg.Message, info *incomingPacketInfo) if info.Params.bool("init") { return } - if decoder, ok := c2cDecoders[pMsg.Head.GetMsgType()]; ok { + if decoder, _ := peekC2CDecoder(pMsg.Head.GetMsgType()); decoder != nil { decoder(c, pMsg, info) } else { c.Debug("unknown msg type on c2c processor: %v - %v", pMsg.Head.GetMsgType(), pMsg.Head.GetC2CCmd()) diff --git a/client/decoders.go b/client/decoders.go index 6c5e4123..32a4d113 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -395,13 +395,16 @@ func decodeSvcNotify(c *QQClient, _ *incomingPacketInfo, payload []byte) (interf } notify := &jce.RequestPushNotify{} notify.ReadFrom(jce.NewJceReader(data.Map["req_PushNotify"]["PushNotifyPack.RequestPushNotify"][1:])) - if _, ok := troopSystemMsgDecoders[notify.MsgType]; ok && notify.MsgType != 85 && notify.MsgType != 36 { - c.exceptAndDispatchGroupSysMsg() - return nil, nil - } - if _, ok := sysMsgDecoders[notify.MsgType]; ok { - _, pkt := c.buildSystemMsgNewFriendPacket() - return nil, c.sendPacket(pkt) + if decoder, typ := peekC2CDecoder(notify.MsgType); decoder != nil { + // notify.MsgType != 85 && notify.MsgType != 36 moves to c2c_decoders.go [nonSvcNotifyTroopSystemMsgDecoders] + if typ == troopSystemMsgDecoders { + c.exceptAndDispatchGroupSysMsg() + return nil, nil + } + if typ == sysMsgDecoders { + _, pkt := c.buildSystemMsgNewFriendPacket() + return nil, c.sendPacket(pkt) + } } _, err := c.sendAndWait(c.buildGetMessageRequestPacket(msg.SyncFlag_START, time.Now().Unix())) return nil, err