1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 11:07:40 +08:00

add event: ClientDisconnectedEvent.

This commit is contained in:
Mrs4s 2020-07-20 16:45:46 +08:00
parent 41141b5a84
commit e3f240db4c
4 changed files with 36 additions and 0 deletions

View File

@ -103,6 +103,7 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient {
"OnlinePush.PbPushTransMsg": decodeOnlinePushTransPacket,
"ConfigPushSvc.PushReq": decodePushReqPacket,
"MessageSvc.PbGetMsg": decodeMessageSvcPacket,
"MessageSvc.PushForceOffline": decodeForceOfflinePacket,
"friendlist.getFriendGroupList": decodeFriendGroupListResponse,
"friendlist.GetTroopListReqV2": decodeGroupListResponse,
"friendlist.GetTroopMemberListReq": decodeGroupMemberListResponse,
@ -576,6 +577,7 @@ func (c *QQClient) loop() {
}
}()
}
c.Conn.Close()
}
func (c *QQClient) heartbeat() {

View File

@ -652,3 +652,17 @@ func decodeSystemMsgFriendPacket(c *QQClient, _ uint16, payload []byte) (interfa
}
return nil, nil
}
func decodeForceOfflinePacket(c *QQClient, _ uint16, payload []byte) (interface{}, error) {
request := &jce.RequestPacket{}
request.ReadFrom(jce.NewJceReader(payload))
data := &jce.RequestDataVersion2{}
data.ReadFrom(jce.NewJceReader(request.SBuffer))
r := jce.NewJceReader(data.Map["req_PushForceOffline"]["PushNotifyPack.RequestPushForceOffline"][1:])
tips := r.ReadString(2)
if c.Online {
c.Online = false
c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: tips})
}
return nil, nil
}

View File

@ -104,6 +104,10 @@ type (
NewPermission MemberPermission
}
ClientDisconnectedEvent struct {
Message string
}
GroupInvitedRequest struct {
RequestId int64
InvitorUin int64

View File

@ -19,6 +19,7 @@ type eventHandlers struct {
groupInvitedHandlers []func(*QQClient, *GroupInvitedRequest)
joinRequestHandlers []func(*QQClient, *UserJoinGroupRequest)
friendRequestHandlers []func(*QQClient, *NewFriendRequest)
disconnectHandlers []func(*QQClient, *ClientDisconnectedEvent)
groupMessageReceiptHandlers sync.Map
}
@ -82,6 +83,10 @@ func (c *QQClient) OnNewFriendRequest(f func(*QQClient, *NewFriendRequest)) {
c.eventHandlers.friendRequestHandlers = append(c.eventHandlers.friendRequestHandlers, f)
}
func (c *QQClient) OnDisconnected(f func(*QQClient, *ClientDisconnectedEvent)) {
c.eventHandlers.disconnectHandlers = append(c.eventHandlers.disconnectHandlers, f)
}
func NewUinFilterPrivate(uin int64) func(*message.PrivateMessage) bool {
return func(msg *message.PrivateMessage) bool {
return msg.Sender.Uin == uin
@ -246,6 +251,17 @@ func (c *QQClient) dispatchNewFriendRequest(r *NewFriendRequest) {
}
}
func (c *QQClient) dispatchDisconnectEvent(e *ClientDisconnectedEvent) {
if e == nil {
return
}
for _, f := range c.eventHandlers.disconnectHandlers {
cover(func() {
f(c, e)
})
}
}
func cover(f func()) {
defer func() {
if pan := recover(); pan != nil {