mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 19:17:38 +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,
|
"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() {
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user