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, "OnlinePush.PbPushTransMsg": decodeOnlinePushTransPacket,
"ConfigPushSvc.PushReq": decodePushReqPacket, "ConfigPushSvc.PushReq": decodePushReqPacket,
"MessageSvc.PbGetMsg": decodeMessageSvcPacket, "MessageSvc.PbGetMsg": decodeMessageSvcPacket,
"MessageSvc.PushForceOffline": decodeForceOfflinePacket,
"friendlist.getFriendGroupList": decodeFriendGroupListResponse, "friendlist.getFriendGroupList": decodeFriendGroupListResponse,
"friendlist.GetTroopListReqV2": decodeGroupListResponse, "friendlist.GetTroopListReqV2": decodeGroupListResponse,
"friendlist.GetTroopMemberListReq": decodeGroupMemberListResponse, "friendlist.GetTroopMemberListReq": decodeGroupMemberListResponse,
@ -576,6 +577,7 @@ func (c *QQClient) loop() {
} }
}() }()
} }
c.Conn.Close()
} }
func (c *QQClient) heartbeat() { func (c *QQClient) heartbeat() {

View File

@ -652,3 +652,17 @@ func decodeSystemMsgFriendPacket(c *QQClient, _ uint16, payload []byte) (interfa
} }
return nil, nil 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 NewPermission MemberPermission
} }
ClientDisconnectedEvent struct {
Message string
}
GroupInvitedRequest struct { GroupInvitedRequest struct {
RequestId int64 RequestId int64
InvitorUin int64 InvitorUin int64

View File

@ -19,6 +19,7 @@ type eventHandlers struct {
groupInvitedHandlers []func(*QQClient, *GroupInvitedRequest) groupInvitedHandlers []func(*QQClient, *GroupInvitedRequest)
joinRequestHandlers []func(*QQClient, *UserJoinGroupRequest) joinRequestHandlers []func(*QQClient, *UserJoinGroupRequest)
friendRequestHandlers []func(*QQClient, *NewFriendRequest) friendRequestHandlers []func(*QQClient, *NewFriendRequest)
disconnectHandlers []func(*QQClient, *ClientDisconnectedEvent)
groupMessageReceiptHandlers sync.Map groupMessageReceiptHandlers sync.Map
} }
@ -82,6 +83,10 @@ func (c *QQClient) OnNewFriendRequest(f func(*QQClient, *NewFriendRequest)) {
c.eventHandlers.friendRequestHandlers = append(c.eventHandlers.friendRequestHandlers, f) 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 { func NewUinFilterPrivate(uin int64) func(*message.PrivateMessage) bool {
return func(msg *message.PrivateMessage) bool { return func(msg *message.PrivateMessage) bool {
return msg.Sender.Uin == uin 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()) { func cover(f func()) {
defer func() { defer func() {
if pan := recover(); pan != nil { if pan := recover(); pan != nil {