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:
parent
41141b5a84
commit
e3f240db4c
@ -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() {
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -104,6 +104,10 @@ type (
|
||||
NewPermission MemberPermission
|
||||
}
|
||||
|
||||
ClientDisconnectedEvent struct {
|
||||
Message string
|
||||
}
|
||||
|
||||
GroupInvitedRequest struct {
|
||||
RequestId int64
|
||||
InvitorUin int64
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user