mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 11:07:40 +08:00
client: use generic event handler
This commit is contained in:
parent
ab2ee60132
commit
d9f803837f
@ -132,10 +132,10 @@ func privateMessageDecoder(c *QQClient, pMsg *msg.Message, _ *network.IncomingPa
|
||||
}
|
||||
|
||||
if pMsg.Head.GetFromUin() == c.Uin {
|
||||
c.dispatchPrivateMessageSelf(c.parsePrivateMessage(pMsg))
|
||||
c.SelfPrivateMessageEvent.dispatch(c, c.parsePrivateMessage(pMsg))
|
||||
return
|
||||
}
|
||||
c.dispatchPrivateMessage(c.parsePrivateMessage(pMsg))
|
||||
c.PrivateMessageEvent.dispatch(c, c.parsePrivateMessage(pMsg))
|
||||
default:
|
||||
c.Debug("unknown c2c cmd on private msg decoder: %v", pMsg.Head.GetC2CCmd())
|
||||
}
|
||||
@ -149,7 +149,7 @@ func privatePttDecoder(c *QQClient, pMsg *msg.Message, _ *network.IncomingPacket
|
||||
// m := binary.NewReader(pMsg.Body.RichText.Ptt.Reserve[1:]).ReadTlvMap(1)
|
||||
// T3 -> timestamp T8 -> voiceType T9 -> voiceLength T10 -> PbReserveStruct
|
||||
}
|
||||
c.dispatchPrivateMessage(c.parsePrivateMessage(pMsg))
|
||||
c.PrivateMessageEvent.dispatch(c, c.parsePrivateMessage(pMsg))
|
||||
}
|
||||
|
||||
func tempSessionDecoder(c *QQClient, pMsg *msg.Message, _ *network.IncomingPacketInfo) {
|
||||
@ -206,7 +206,7 @@ func tempSessionDecoder(c *QQClient, pMsg *msg.Message, _ *network.IncomingPacke
|
||||
if pMsg.Head.GetFromUin() == c.Uin {
|
||||
return
|
||||
}
|
||||
c.dispatchTempMessage(&TempMessageEvent{
|
||||
c.TempMessageEvent.dispatch(c, &TempMessageEvent{
|
||||
Message: c.parseTempMessage(pMsg),
|
||||
Session: session,
|
||||
})
|
||||
@ -219,7 +219,7 @@ func troopAddMemberBroadcastDecoder(c *QQClient, pMsg *msg.Message, _ *network.I
|
||||
group := c.FindGroupByUin(pMsg.Head.GetFromUin())
|
||||
if pMsg.Head.GetAuthUin() == c.Uin {
|
||||
if group == nil && c.ReloadGroupList() == nil {
|
||||
c.dispatchJoinGroupEvent(c.FindGroupByUin(pMsg.Head.GetFromUin()))
|
||||
c.GroupJoinEvent.dispatch(c, c.FindGroupByUin(pMsg.Head.GetFromUin()))
|
||||
}
|
||||
} else {
|
||||
if group != nil && group.FindMember(pMsg.Head.GetAuthUin()) == nil {
|
||||
@ -232,7 +232,7 @@ func troopAddMemberBroadcastDecoder(c *QQClient, pMsg *msg.Message, _ *network.I
|
||||
info.Members = append(info.Members, mem)
|
||||
info.sort()
|
||||
})
|
||||
c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
|
||||
c.GroupMemberJoinEvent.dispatch(c, &MemberJoinGroupEvent{
|
||||
Group: group,
|
||||
Member: mem,
|
||||
})
|
||||
@ -275,7 +275,7 @@ func msgType0x211Decoder(c *QQClient, pMsg *msg.Message, info *network.IncomingP
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
c.dispatchOfflineFileEvent(&OfflineFileEvent{
|
||||
c.OfflineFileEvent.dispatch(c, &OfflineFileEvent{
|
||||
FileName: string(sub4.NotOnlineFile.FileName),
|
||||
FileSize: sub4.NotOnlineFile.GetFileSize(),
|
||||
Sender: pMsg.Head.GetFromUin(),
|
||||
|
@ -19,6 +19,7 @@ import (
|
||||
"github.com/Mrs4s/MiraiGo/client/internal/network"
|
||||
"github.com/Mrs4s/MiraiGo/client/internal/oicq"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/msg"
|
||||
"github.com/Mrs4s/MiraiGo/message"
|
||||
"github.com/Mrs4s/MiraiGo/utils"
|
||||
)
|
||||
|
||||
@ -76,6 +77,35 @@ type QQClient struct {
|
||||
// otherSrvAddrs []string
|
||||
// fileStorageInfo *jce.FileStoragePushFSSvcList
|
||||
|
||||
// event handles
|
||||
eventHandlers eventHandlers
|
||||
PrivateMessageEvent EventHandle[*message.PrivateMessage]
|
||||
TempMessageEvent EventHandle[*TempMessageEvent]
|
||||
GroupMessageEvent EventHandle[*message.GroupMessage]
|
||||
SelfPrivateMessageEvent EventHandle[*message.PrivateMessage]
|
||||
SelfGroupMessageEvent EventHandle[*message.GroupMessage]
|
||||
GroupMuteEvent EventHandle[*GroupMuteEvent]
|
||||
GroupMessageRecalledEvent EventHandle[*GroupMessageRecalledEvent]
|
||||
FriendMessageRecalledEvent EventHandle[*FriendMessageRecalledEvent]
|
||||
GroupJoinEvent EventHandle[*GroupInfo]
|
||||
GroupLeaveEvent EventHandle[*GroupLeaveEvent]
|
||||
GroupMemberJoinEvent EventHandle[*MemberJoinGroupEvent]
|
||||
GroupMemberLeaveEvent EventHandle[*MemberLeaveGroupEvent]
|
||||
MemberCardUpdatedEvent EventHandle[*MemberCardUpdatedEvent]
|
||||
GroupNameUpdatedEvent EventHandle[*GroupNameUpdatedEvent]
|
||||
GroupMemberPermissionChangedEvent EventHandle[*MemberPermissionChangedEvent]
|
||||
GroupInvitedEvent EventHandle[*GroupInvitedRequest]
|
||||
UserWantJoinGroupEvent EventHandle[*UserJoinGroupRequest]
|
||||
NewFriendEvent EventHandle[*NewFriendEvent]
|
||||
NewFriendRequestEvent EventHandle[*NewFriendRequest]
|
||||
DisconnectedEvent EventHandle[*ClientDisconnectedEvent]
|
||||
GroupNotifyEvent EventHandle[INotifyEvent]
|
||||
FriendNotifyEvent EventHandle[INotifyEvent]
|
||||
MemberSpecialTitleUpdatedEvent EventHandle[*MemberSpecialTitleUpdatedEvent]
|
||||
GroupDigestEvent EventHandle[*GroupDigestEvent]
|
||||
OtherClientStatusChangedEvent EventHandle[*OtherClientStatusChangedEvent]
|
||||
OfflineFileEvent EventHandle[*OfflineFileEvent]
|
||||
|
||||
// message state
|
||||
msgSvcCache *utils.Cache[unit]
|
||||
lastC2CMsgTime int64
|
||||
@ -88,7 +118,6 @@ type QQClient struct {
|
||||
groupSeq atomic.Int32
|
||||
friendSeq atomic.Int32
|
||||
highwayApplyUpSeq atomic.Int32
|
||||
eventHandlers eventHandlers
|
||||
|
||||
groupListLock sync.Mutex
|
||||
}
|
||||
|
@ -659,10 +659,10 @@ func decodeOnlinePushTransPacket(c *QQClient, _ *network.IncomingPacketInfo, pay
|
||||
switch typ {
|
||||
case 0x02:
|
||||
if target == c.Uin {
|
||||
c.dispatchLeaveGroupEvent(&GroupLeaveEvent{Group: g})
|
||||
c.GroupLeaveEvent.dispatch(c, &GroupLeaveEvent{Group: g})
|
||||
} else if m := g.FindMember(target); m != nil {
|
||||
g.removeMember(target)
|
||||
c.dispatchMemberLeaveEvent(&MemberLeaveGroupEvent{
|
||||
c.GroupMemberLeaveEvent.dispatch(c, &MemberLeaveGroupEvent{
|
||||
Group: g,
|
||||
Member: m,
|
||||
})
|
||||
@ -672,13 +672,13 @@ func decodeOnlinePushTransPacket(c *QQClient, _ *network.IncomingPacketInfo, pay
|
||||
return nil, err
|
||||
}
|
||||
if target == c.Uin {
|
||||
c.dispatchLeaveGroupEvent(&GroupLeaveEvent{
|
||||
c.GroupLeaveEvent.dispatch(c, &GroupLeaveEvent{
|
||||
Group: g,
|
||||
Operator: g.FindMember(operator),
|
||||
})
|
||||
} else if m := g.FindMember(target); m != nil {
|
||||
g.removeMember(target)
|
||||
c.dispatchMemberLeaveEvent(&MemberLeaveGroupEvent{
|
||||
c.GroupMemberLeaveEvent.dispatch(c, &MemberLeaveGroupEvent{
|
||||
Group: g,
|
||||
Member: m,
|
||||
Operator: g.FindMember(operator),
|
||||
@ -687,7 +687,7 @@ func decodeOnlinePushTransPacket(c *QQClient, _ *network.IncomingPacketInfo, pay
|
||||
case 0x82:
|
||||
if m := g.FindMember(target); m != nil {
|
||||
g.removeMember(target)
|
||||
c.dispatchMemberLeaveEvent(&MemberLeaveGroupEvent{
|
||||
c.GroupMemberLeaveEvent.dispatch(c, &MemberLeaveGroupEvent{
|
||||
Group: g,
|
||||
Member: m,
|
||||
})
|
||||
@ -695,7 +695,7 @@ func decodeOnlinePushTransPacket(c *QQClient, _ *network.IncomingPacketInfo, pay
|
||||
case 0x83:
|
||||
if m := g.FindMember(target); m != nil {
|
||||
g.removeMember(target)
|
||||
c.dispatchMemberLeaveEvent(&MemberLeaveGroupEvent{
|
||||
c.GroupMemberLeaveEvent.dispatch(c, &MemberLeaveGroupEvent{
|
||||
Group: g,
|
||||
Member: m,
|
||||
Operator: g.FindMember(operator),
|
||||
@ -724,7 +724,7 @@ func decodeOnlinePushTransPacket(c *QQClient, _ *network.IncomingPacketInfo, pay
|
||||
if mem.Permission != newPermission {
|
||||
old := mem.Permission
|
||||
mem.Permission = newPermission
|
||||
c.dispatchPermissionChanged(&MemberPermissionChangedEvent{
|
||||
c.GroupMemberPermissionChangedEvent.dispatch(c, &MemberPermissionChangedEvent{
|
||||
Group: g,
|
||||
Member: mem,
|
||||
OldPermission: old,
|
||||
@ -748,7 +748,7 @@ func decodeSystemMsgFriendPacket(c *QQClient, _ *network.IncomingPacketInfo, pay
|
||||
}
|
||||
st := rsp.Friendmsgs[0]
|
||||
if st.Msg != nil {
|
||||
c.dispatchNewFriendRequest(&NewFriendRequest{
|
||||
c.NewFriendRequestEvent.dispatch(c, &NewFriendRequest{
|
||||
RequestId: st.MsgSeq,
|
||||
Message: st.Msg.MsgAdditional,
|
||||
RequesterUin: st.ReqUin,
|
||||
@ -768,7 +768,7 @@ func decodeForceOfflinePacket(c *QQClient, _ *network.IncomingPacketInfo, payloa
|
||||
r := jce.NewJceReader(data.Map["req_PushForceOffline"]["PushNotifyPack.RequestPushForceOffline"][1:])
|
||||
tips := r.ReadString(2)
|
||||
c.Disconnect()
|
||||
go c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: tips})
|
||||
go c.DisconnectedEvent.dispatch(c, &ClientDisconnectedEvent{Message: tips})
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@ -777,7 +777,7 @@ func decodeMSFOfflinePacket(c *QQClient, _ *network.IncomingPacketInfo, _ []byte
|
||||
// c.lastLostMsg = "服务器端强制下线."
|
||||
c.Disconnect()
|
||||
// 这个decoder不能消耗太多时间, event另起线程处理
|
||||
go c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: "服务端强制下线."})
|
||||
go c.DisconnectedEvent.dispatch(c, &ClientDisconnectedEvent{Message: "服务端强制下线."})
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
460
client/events.go
460
client/events.go
@ -8,12 +8,36 @@ import (
|
||||
"github.com/Mrs4s/MiraiGo/message"
|
||||
)
|
||||
|
||||
// protected all EventHandle, since write is very rare, use
|
||||
// only one lock to save memory
|
||||
var eventMu sync.RWMutex
|
||||
|
||||
type EventHandle[T any] struct {
|
||||
// QQClient?
|
||||
handlers []func(client *QQClient, event T)
|
||||
}
|
||||
|
||||
func (handle *EventHandle[T]) Subscribe(handler func(client *QQClient, event T)) {
|
||||
eventMu.Lock()
|
||||
defer eventMu.Unlock()
|
||||
handle.handlers = append(handle.handlers, handler)
|
||||
}
|
||||
|
||||
func (handle *EventHandle[T]) dispatch(client *QQClient, event T) {
|
||||
eventMu.RLock()
|
||||
defer eventMu.RUnlock()
|
||||
defer func() {
|
||||
if pan := recover(); pan != nil {
|
||||
fmt.Printf("event error: %v\n%s", pan, debug.Stack())
|
||||
}
|
||||
}()
|
||||
for _, handler := range handle.handlers {
|
||||
handler(client, event)
|
||||
}
|
||||
}
|
||||
|
||||
type eventHandlers struct {
|
||||
privateMessageHandlers []func(*QQClient, *message.PrivateMessage)
|
||||
tempMessageHandlers []func(*QQClient, *TempMessageEvent)
|
||||
groupMessageHandlers []func(*QQClient, *message.GroupMessage)
|
||||
selfPrivateMessageHandlers []func(*QQClient, *message.PrivateMessage)
|
||||
selfGroupMessageHandlers []func(*QQClient, *message.GroupMessage)
|
||||
// todo: move to event handle
|
||||
guildChannelMessageHandlers []func(*QQClient, *message.GuildChannelMessage)
|
||||
guildMessageReactionsUpdatedHandlers []func(*QQClient, *GuildMessageReactionsUpdatedEvent)
|
||||
guildMessageRecalledHandlers []func(*QQClient, *GuildMessageRecalledEvent)
|
||||
@ -21,58 +45,11 @@ type eventHandlers struct {
|
||||
guildChannelCreatedHandlers []func(*QQClient, *GuildChannelOperationEvent)
|
||||
guildChannelDestroyedHandlers []func(*QQClient, *GuildChannelOperationEvent)
|
||||
memberJoinedGuildHandlers []func(*QQClient, *MemberJoinGuildEvent)
|
||||
groupMuteEventHandlers []func(*QQClient, *GroupMuteEvent)
|
||||
groupRecalledHandlers []func(*QQClient, *GroupMessageRecalledEvent)
|
||||
friendRecalledHandlers []func(*QQClient, *FriendMessageRecalledEvent)
|
||||
joinGroupHandlers []func(*QQClient, *GroupInfo)
|
||||
leaveGroupHandlers []func(*QQClient, *GroupLeaveEvent)
|
||||
memberJoinedHandlers []func(*QQClient, *MemberJoinGroupEvent)
|
||||
memberLeavedHandlers []func(*QQClient, *MemberLeaveGroupEvent)
|
||||
memberCardUpdatedHandlers []func(*QQClient, *MemberCardUpdatedEvent)
|
||||
groupNameUpdatedHandlers []func(*QQClient, *GroupNameUpdatedEvent)
|
||||
permissionChangedHandlers []func(*QQClient, *MemberPermissionChangedEvent)
|
||||
groupInvitedHandlers []func(*QQClient, *GroupInvitedRequest)
|
||||
joinRequestHandlers []func(*QQClient, *UserJoinGroupRequest)
|
||||
friendRequestHandlers []func(*QQClient, *NewFriendRequest)
|
||||
newFriendHandlers []func(*QQClient, *NewFriendEvent)
|
||||
disconnectHandlers []func(*QQClient, *ClientDisconnectedEvent)
|
||||
logHandlers []func(*QQClient, *LogEvent)
|
||||
serverUpdatedHandlers []func(*QQClient, *ServerUpdatedEvent) bool
|
||||
groupNotifyHandlers []func(*QQClient, INotifyEvent)
|
||||
friendNotifyHandlers []func(*QQClient, INotifyEvent)
|
||||
memberTitleUpdatedHandlers []func(*QQClient, *MemberSpecialTitleUpdatedEvent)
|
||||
offlineFileHandlers []func(*QQClient, *OfflineFileEvent)
|
||||
otherClientStatusChangedHandlers []func(*QQClient, *OtherClientStatusChangedEvent)
|
||||
groupDigestHandlers []func(*QQClient, *GroupDigestEvent)
|
||||
groupMessageReceiptHandlers sync.Map
|
||||
}
|
||||
|
||||
func (c *QQClient) OnPrivateMessage(f func(*QQClient, *message.PrivateMessage)) {
|
||||
c.eventHandlers.privateMessageHandlers = append(c.eventHandlers.privateMessageHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnPrivateMessageF(filter func(*message.PrivateMessage) bool, f func(*QQClient, *message.PrivateMessage)) {
|
||||
c.OnPrivateMessage(func(client *QQClient, msg *message.PrivateMessage) {
|
||||
if filter(msg) {
|
||||
f(client, msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (c *QQClient) OnTempMessage(f func(*QQClient, *TempMessageEvent)) {
|
||||
c.eventHandlers.tempMessageHandlers = append(c.eventHandlers.tempMessageHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupMessage(f func(*QQClient, *message.GroupMessage)) {
|
||||
c.eventHandlers.groupMessageHandlers = append(c.eventHandlers.groupMessageHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnSelfPrivateMessage(f func(*QQClient, *message.PrivateMessage)) {
|
||||
c.eventHandlers.selfPrivateMessageHandlers = append(c.eventHandlers.selfPrivateMessageHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnSelfGroupMessage(f func(*QQClient, *message.GroupMessage)) {
|
||||
c.eventHandlers.selfGroupMessageHandlers = append(c.eventHandlers.selfGroupMessageHandlers, f)
|
||||
// consider Logger interface?
|
||||
logHandlers []func(*QQClient, *LogEvent)
|
||||
serverUpdatedHandlers []func(*QQClient, *ServerUpdatedEvent) bool
|
||||
groupMessageReceiptHandlers sync.Map
|
||||
}
|
||||
|
||||
func (s *GuildService) OnGuildChannelMessage(f func(*QQClient, *message.GuildChannelMessage)) {
|
||||
@ -103,99 +80,14 @@ func (s *GuildService) OnMemberJoinedGuild(f func(*QQClient, *MemberJoinGuildEve
|
||||
s.c.eventHandlers.memberJoinedGuildHandlers = append(s.c.eventHandlers.memberJoinedGuildHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupMuted(f func(*QQClient, *GroupMuteEvent)) {
|
||||
c.eventHandlers.groupMuteEventHandlers = append(c.eventHandlers.groupMuteEventHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnJoinGroup(f func(*QQClient, *GroupInfo)) {
|
||||
c.eventHandlers.joinGroupHandlers = append(c.eventHandlers.joinGroupHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnLeaveGroup(f func(*QQClient, *GroupLeaveEvent)) {
|
||||
c.eventHandlers.leaveGroupHandlers = append(c.eventHandlers.leaveGroupHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupMemberJoined(f func(*QQClient, *MemberJoinGroupEvent)) {
|
||||
c.eventHandlers.memberJoinedHandlers = append(c.eventHandlers.memberJoinedHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupMemberLeaved(f func(*QQClient, *MemberLeaveGroupEvent)) {
|
||||
c.eventHandlers.memberLeavedHandlers = append(c.eventHandlers.memberLeavedHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupMemberCardUpdated(f func(*QQClient, *MemberCardUpdatedEvent)) {
|
||||
c.eventHandlers.memberCardUpdatedHandlers = append(c.eventHandlers.memberCardUpdatedHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupNameUpdated(f func(*QQClient, *GroupNameUpdatedEvent)) {
|
||||
c.eventHandlers.groupNameUpdatedHandlers = append(c.eventHandlers.groupNameUpdatedHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupMemberPermissionChanged(f func(*QQClient, *MemberPermissionChangedEvent)) {
|
||||
c.eventHandlers.permissionChangedHandlers = append(c.eventHandlers.permissionChangedHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupMessageRecalled(f func(*QQClient, *GroupMessageRecalledEvent)) {
|
||||
c.eventHandlers.groupRecalledHandlers = append(c.eventHandlers.groupRecalledHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnFriendMessageRecalled(f func(*QQClient, *FriendMessageRecalledEvent)) {
|
||||
c.eventHandlers.friendRecalledHandlers = append(c.eventHandlers.friendRecalledHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupInvited(f func(*QQClient, *GroupInvitedRequest)) {
|
||||
c.eventHandlers.groupInvitedHandlers = append(c.eventHandlers.groupInvitedHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnUserWantJoinGroup(f func(*QQClient, *UserJoinGroupRequest)) {
|
||||
c.eventHandlers.joinRequestHandlers = append(c.eventHandlers.joinRequestHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnNewFriendRequest(f func(*QQClient, *NewFriendRequest)) {
|
||||
c.eventHandlers.friendRequestHandlers = append(c.eventHandlers.friendRequestHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnNewFriendAdded(f func(*QQClient, *NewFriendEvent)) {
|
||||
c.eventHandlers.newFriendHandlers = append(c.eventHandlers.newFriendHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnDisconnected(f func(*QQClient, *ClientDisconnectedEvent)) {
|
||||
c.eventHandlers.disconnectHandlers = append(c.eventHandlers.disconnectHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnServerUpdated(f func(*QQClient, *ServerUpdatedEvent) bool) {
|
||||
c.eventHandlers.serverUpdatedHandlers = append(c.eventHandlers.serverUpdatedHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnReceivedOfflineFile(f func(*QQClient, *OfflineFileEvent)) {
|
||||
c.eventHandlers.offlineFileHandlers = append(c.eventHandlers.offlineFileHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnOtherClientStatusChanged(f func(*QQClient, *OtherClientStatusChangedEvent)) {
|
||||
c.eventHandlers.otherClientStatusChangedHandlers = append(c.eventHandlers.otherClientStatusChangedHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnLog(f func(*QQClient, *LogEvent)) {
|
||||
c.eventHandlers.logHandlers = append(c.eventHandlers.logHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnGroupNotify(f func(*QQClient, INotifyEvent)) {
|
||||
c.eventHandlers.groupNotifyHandlers = append(c.eventHandlers.groupNotifyHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnFriendNotify(f func(*QQClient, INotifyEvent)) {
|
||||
c.eventHandlers.friendNotifyHandlers = append(c.eventHandlers.friendNotifyHandlers, f)
|
||||
}
|
||||
|
||||
func (c *QQClient) OnMemberSpecialTitleUpdated(f func(*QQClient, *MemberSpecialTitleUpdatedEvent)) {
|
||||
c.eventHandlers.memberTitleUpdatedHandlers = append(c.eventHandlers.memberTitleUpdatedHandlers, f)
|
||||
}
|
||||
|
||||
// OnGroupDigest 群精华消息事件注册
|
||||
func (c *QQClient) OnGroupDigest(f func(*QQClient, *GroupDigestEvent)) {
|
||||
c.eventHandlers.groupDigestHandlers = append(c.eventHandlers.groupDigestHandlers, f)
|
||||
}
|
||||
|
||||
func NewUinFilterPrivate(uin int64) func(*message.PrivateMessage) bool {
|
||||
return func(msg *message.PrivateMessage) bool {
|
||||
return msg.Sender.Uin == uin
|
||||
@ -210,61 +102,6 @@ func (c *QQClient) onGroupMessageReceipt(id string, f ...func(*QQClient, *groupM
|
||||
c.eventHandlers.groupMessageReceiptHandlers.LoadOrStore(id, f[0])
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchPrivateMessage(msg *message.PrivateMessage) {
|
||||
if msg == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.privateMessageHandlers {
|
||||
cover(func() {
|
||||
f(c, msg)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchTempMessage(e *TempMessageEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.tempMessageHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGroupMessage(msg *message.GroupMessage) {
|
||||
if msg == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.groupMessageHandlers {
|
||||
cover(func() {
|
||||
f(c, msg)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchPrivateMessageSelf(msg *message.PrivateMessage) {
|
||||
if msg == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.selfPrivateMessageHandlers {
|
||||
cover(func() {
|
||||
f(c, msg)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGroupMessageSelf(msg *message.GroupMessage) {
|
||||
if msg == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.selfGroupMessageHandlers {
|
||||
cover(func() {
|
||||
f(c, msg)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGuildChannelMessage(msg *message.GuildChannelMessage) {
|
||||
if msg == nil {
|
||||
return
|
||||
@ -342,116 +179,6 @@ func (c *QQClient) dispatchMemberJoinedGuildEvent(e *MemberJoinGuildEvent) {
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGroupMuteEvent(e *GroupMuteEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.groupMuteEventHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGroupMessageRecalledEvent(e *GroupMessageRecalledEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.groupRecalledHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchFriendMessageRecalledEvent(e *FriendMessageRecalledEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.friendRecalledHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchJoinGroupEvent(group *GroupInfo) {
|
||||
if group == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.joinGroupHandlers {
|
||||
cover(func() {
|
||||
f(c, group)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchLeaveGroupEvent(e *GroupLeaveEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.leaveGroupHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchNewMemberEvent(e *MemberJoinGroupEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.memberJoinedHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchMemberLeaveEvent(e *MemberLeaveGroupEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.memberLeavedHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchMemberCardUpdatedEvent(e *MemberCardUpdatedEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.memberCardUpdatedHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGroupNameUpdatedEvent(e *GroupNameUpdatedEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.groupNameUpdatedHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchPermissionChanged(e *MemberPermissionChangedEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.permissionChangedHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGroupMessageReceiptEvent(e *groupMessageReceiptEvent) {
|
||||
c.eventHandlers.groupMessageReceiptHandlers.Range(func(_, f interface{}) bool {
|
||||
go f.(func(*QQClient, *groupMessageReceiptEvent))(c, e)
|
||||
@ -459,127 +186,6 @@ func (c *QQClient) dispatchGroupMessageReceiptEvent(e *groupMessageReceiptEvent)
|
||||
})
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGroupInvitedEvent(e *GroupInvitedRequest) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.groupInvitedHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchJoinGroupRequest(r *UserJoinGroupRequest) {
|
||||
if r == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.joinRequestHandlers {
|
||||
cover(func() {
|
||||
f(c, r)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchNewFriendRequest(r *NewFriendRequest) {
|
||||
if r == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.friendRequestHandlers {
|
||||
cover(func() {
|
||||
f(c, r)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchNewFriendEvent(e *NewFriendEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.newFriendHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGroupNotifyEvent(e INotifyEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.groupNotifyHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchFriendNotifyEvent(e INotifyEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.friendNotifyHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchMemberSpecialTitleUpdateEvent(e *MemberSpecialTitleUpdatedEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.memberTitleUpdatedHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchDisconnectEvent(e *ClientDisconnectedEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.disconnectHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchOfflineFileEvent(e *OfflineFileEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.offlineFileHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchOtherClientStatusChangedEvent(e *OtherClientStatusChangedEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.otherClientStatusChangedHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchGroupDigestEvent(e *GroupDigestEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
}
|
||||
for _, f := range c.eventHandlers.groupDigestHandlers {
|
||||
cover(func() {
|
||||
f(c, e)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (c *QQClient) dispatchLogEvent(e *LogEvent) {
|
||||
if e == nil {
|
||||
return
|
||||
|
@ -317,17 +317,17 @@ func decodeGroupMessagePacket(c *QQClient, _ *network.IncomingPacketInfo, payloa
|
||||
if builder.len() >= pkt.Message.Content.GetPkgNum() {
|
||||
c.msgBuilders.Delete(seq)
|
||||
if pkt.Message.Head.GetFromUin() == c.Uin {
|
||||
c.dispatchGroupMessageSelf(c.parseGroupMessage(builder.build()))
|
||||
c.SelfGroupMessageEvent.dispatch(c, c.parseGroupMessage(builder.build()))
|
||||
} else {
|
||||
c.dispatchGroupMessage(c.parseGroupMessage(builder.build()))
|
||||
c.GroupMessageEvent.dispatch(c, c.parseGroupMessage(builder.build()))
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
if pkt.Message.Head.GetFromUin() == c.Uin {
|
||||
c.dispatchGroupMessageSelf(c.parseGroupMessage(pkt.Message))
|
||||
c.SelfGroupMessageEvent.dispatch(c, c.parseGroupMessage(pkt.Message))
|
||||
} else {
|
||||
c.dispatchGroupMessage(c.parseGroupMessage(pkt.Message))
|
||||
c.GroupMessageEvent.dispatch(c, c.parseGroupMessage(pkt.Message))
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
@ -463,7 +463,7 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage {
|
||||
mem = info
|
||||
group.Members = append(group.Members, mem)
|
||||
group.sort()
|
||||
go c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
|
||||
go c.GroupMemberJoinEvent.dispatch(c, &MemberJoinGroupEvent{
|
||||
Group: group,
|
||||
Member: info,
|
||||
})
|
||||
@ -531,7 +531,7 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage {
|
||||
mem.CardName = groupCard
|
||||
}
|
||||
if old != mem.CardName {
|
||||
go c.dispatchMemberCardUpdatedEvent(&MemberCardUpdatedEvent{
|
||||
c.MemberCardUpdatedEvent.dispatch(c, &MemberCardUpdatedEvent{
|
||||
Group: group,
|
||||
OldCard: old,
|
||||
Member: mem,
|
||||
|
@ -102,15 +102,15 @@ func (c *QQClient) connect() error {
|
||||
return err
|
||||
}
|
||||
c.once.Do(func() {
|
||||
c.OnGroupMessage(func(_ *QQClient, _ *message.GroupMessage) {
|
||||
c.GroupMessageEvent.Subscribe(func(_ *QQClient, _ *message.GroupMessage) {
|
||||
c.stat.MessageReceived.Add(1)
|
||||
c.stat.LastMessageTime.Store(time.Now().Unix())
|
||||
})
|
||||
c.OnPrivateMessage(func(_ *QQClient, _ *message.PrivateMessage) {
|
||||
c.PrivateMessageEvent.Subscribe(func(_ *QQClient, _ *message.PrivateMessage) {
|
||||
c.stat.MessageReceived.Add(1)
|
||||
c.stat.LastMessageTime.Store(time.Now().Unix())
|
||||
})
|
||||
c.OnTempMessage(func(_ *QQClient, _ *TempMessageEvent) {
|
||||
c.TempMessageEvent.Subscribe(func(_ *QQClient, _ *TempMessageEvent) {
|
||||
c.stat.MessageReceived.Add(1)
|
||||
c.stat.LastMessageTime.Store(time.Now().Unix())
|
||||
})
|
||||
@ -130,13 +130,13 @@ func (c *QQClient) quickReconnect() {
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
if err := c.connect(); err != nil {
|
||||
c.Error("connect server error: %v", err)
|
||||
c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: "quick reconnect failed"})
|
||||
c.DisconnectedEvent.dispatch(c, &ClientDisconnectedEvent{Message: "quick reconnect failed"})
|
||||
return
|
||||
}
|
||||
if err := c.registerClient(); err != nil {
|
||||
c.Error("register client failed: %v", err)
|
||||
c.Disconnect()
|
||||
c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: "register error"})
|
||||
c.DisconnectedEvent.dispatch(c, &ClientDisconnectedEvent{Message: "register error"})
|
||||
return
|
||||
}
|
||||
}
|
||||
@ -263,13 +263,13 @@ func (c *QQClient) unexpectedDisconnect(_ *network.TCPListener, e error) {
|
||||
c.Online.Store(false)
|
||||
if err := c.connect(); err != nil {
|
||||
c.Error("connect server error: %v", err)
|
||||
c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: "connection dropped by server."})
|
||||
c.DisconnectedEvent.dispatch(c, &ClientDisconnectedEvent{Message: "connection dropped by server."})
|
||||
return
|
||||
}
|
||||
if err := c.registerClient(); err != nil {
|
||||
c.Error("register client failed: %v", err)
|
||||
c.Disconnect()
|
||||
c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: "register error"})
|
||||
c.DisconnectedEvent.dispatch(c, &ClientDisconnectedEvent{Message: "register error"})
|
||||
return
|
||||
}
|
||||
}
|
||||
@ -298,7 +298,7 @@ func (c *QQClient) netLoop() {
|
||||
c.Error("parse incoming packet error: %v", err)
|
||||
if errors.Is(err, network.ErrSessionExpired) || errors.Is(err, network.ErrPacketDropped) {
|
||||
c.Disconnect()
|
||||
go c.dispatchDisconnectEvent(&ClientDisconnectedEvent{Message: "session expired"})
|
||||
go c.DisconnectedEvent.dispatch(c, &ClientDisconnectedEvent{Message: "session expired"})
|
||||
continue
|
||||
}
|
||||
errCount++
|
||||
|
@ -62,7 +62,7 @@ func (c *QQClient) grayTipProcessor(groupCode int64, tipInfo *notify.GeneralGray
|
||||
}
|
||||
}
|
||||
if sender != 0 {
|
||||
c.dispatchGroupNotifyEvent(&GroupPokeNotifyEvent{
|
||||
c.GroupNotifyEvent.dispatch(c, &GroupPokeNotifyEvent{
|
||||
GroupCode: groupCode,
|
||||
Sender: sender,
|
||||
Receiver: receiver,
|
||||
@ -81,7 +81,7 @@ func (c *QQClient) grayTipProcessor(groupCode int64, tipInfo *notify.GeneralGray
|
||||
uin, _ = strconv.ParseInt(templ.Value, 10, 64)
|
||||
}
|
||||
}
|
||||
c.dispatchGroupNotifyEvent(&MemberHonorChangedNotifyEvent{
|
||||
c.GroupNotifyEvent.dispatch(c, &MemberHonorChangedNotifyEvent{
|
||||
GroupCode: groupCode,
|
||||
Honor: func() HonorType {
|
||||
switch tipInfo.TemplId {
|
||||
@ -145,7 +145,7 @@ func (c *QQClient) msgGrayTipProcessor(groupCode int64, tipInfo *notify.AIOGrayT
|
||||
if mem := c.FindGroup(groupCode).FindMember(event.Uin); mem != nil {
|
||||
mem.SpecialTitle = event.NewTitle
|
||||
}
|
||||
c.dispatchMemberSpecialTitleUpdateEvent(event)
|
||||
c.MemberSpecialTitleUpdatedEvent.dispatch(c, event)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -53,7 +53,7 @@ func decodeOnlinePushReqPacket(c *QQClient, info *network.IncomingPacketInfo, pa
|
||||
r.ReadBytes(6)
|
||||
target := int64(uint32(r.ReadInt32()))
|
||||
t := r.ReadInt32()
|
||||
c.dispatchGroupMuteEvent(&GroupMuteEvent{
|
||||
c.GroupMuteEvent.dispatch(c, &GroupMuteEvent{
|
||||
GroupCode: groupCode,
|
||||
OperatorUin: operator,
|
||||
TargetUin: target,
|
||||
@ -68,7 +68,7 @@ func decodeOnlinePushReqPacket(c *QQClient, info *network.IncomingPacketInfo, pa
|
||||
if rm.MsgType == 2 {
|
||||
continue
|
||||
}
|
||||
c.dispatchGroupMessageRecalledEvent(&GroupMessageRecalledEvent{
|
||||
c.GroupMessageRecalledEvent.dispatch(c, &GroupMessageRecalledEvent{
|
||||
GroupCode: groupCode,
|
||||
OperatorUin: b.OptMsgRecall.Uin,
|
||||
AuthorUin: rm.AuthorUin,
|
||||
@ -82,7 +82,7 @@ func decodeOnlinePushReqPacket(c *QQClient, info *network.IncomingPacketInfo, pa
|
||||
}
|
||||
if b.OptMsgRedTips != nil {
|
||||
if b.OptMsgRedTips.LuckyFlag == 1 { // 运气王提示
|
||||
c.dispatchGroupNotifyEvent(&GroupRedBagLuckyKingNotifyEvent{
|
||||
c.GroupNotifyEvent.dispatch(c, &GroupRedBagLuckyKingNotifyEvent{
|
||||
GroupCode: groupCode,
|
||||
Sender: int64(b.OptMsgRedTips.SenderUin),
|
||||
LuckyKing: int64(b.OptMsgRedTips.LuckyUin),
|
||||
@ -91,7 +91,7 @@ func decodeOnlinePushReqPacket(c *QQClient, info *network.IncomingPacketInfo, pa
|
||||
}
|
||||
if b.QqGroupDigestMsg != nil {
|
||||
digest := b.QqGroupDigestMsg
|
||||
c.dispatchGroupDigestEvent(&GroupDigestEvent{
|
||||
c.GroupDigestEvent.dispatch(c, &GroupDigestEvent{
|
||||
GroupCode: int64(digest.GroupCode),
|
||||
MessageID: int32(digest.Seq),
|
||||
InternalMessageID: int32(digest.Random),
|
||||
@ -132,7 +132,7 @@ func msgType0x210Sub8ADecoder(c *QQClient, protobuf []byte) error {
|
||||
}
|
||||
for _, m := range s8a.MsgInfo {
|
||||
if m.ToUin == c.Uin {
|
||||
c.dispatchFriendMessageRecalledEvent(&FriendMessageRecalledEvent{
|
||||
c.FriendMessageRecalledEvent.dispatch(c, &FriendMessageRecalledEvent{
|
||||
FriendUin: m.FromUin,
|
||||
MessageId: m.MsgSeq,
|
||||
Time: m.MsgTime,
|
||||
@ -152,7 +152,7 @@ func msgType0x210SubB3Decoder(c *QQClient, protobuf []byte) error {
|
||||
Nickname: b3.MsgAddFrdNotify.Nick,
|
||||
}
|
||||
c.FriendList = append(c.FriendList, frd)
|
||||
c.dispatchNewFriendEvent(&NewFriendEvent{Friend: frd})
|
||||
c.NewFriendEvent.dispatch(c, &NewFriendEvent{Friend: frd})
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -167,7 +167,7 @@ func msgType0x210SubD4Decoder(c *QQClient, protobuf []byte) error {
|
||||
groupLeaveLock.Unlock()
|
||||
return err
|
||||
}
|
||||
c.dispatchLeaveGroupEvent(&GroupLeaveEvent{Group: g})
|
||||
c.GroupLeaveEvent.dispatch(c, &GroupLeaveEvent{Group: g})
|
||||
}
|
||||
groupLeaveLock.Unlock()
|
||||
return nil
|
||||
@ -185,7 +185,7 @@ func msgType0x210Sub27Decoder(c *QQClient, protobuf []byte) error {
|
||||
if g := c.FindGroup(int64(m.ModGroupProfile.GetGroupCode())); g != nil {
|
||||
old := g.Name
|
||||
g.Name = string(info.Value)
|
||||
c.dispatchGroupNameUpdatedEvent(&GroupNameUpdatedEvent{
|
||||
c.GroupNameUpdatedEvent.dispatch(c, &GroupNameUpdatedEvent{
|
||||
Group: g,
|
||||
OldName: old,
|
||||
NewName: g.Name,
|
||||
@ -221,7 +221,7 @@ func msgType0x210Sub122Decoder(c *QQClient, protobuf []byte) error {
|
||||
if sender == 0 {
|
||||
return nil
|
||||
}
|
||||
c.dispatchFriendNotifyEvent(&FriendPokeNotifyEvent{
|
||||
c.FriendNotifyEvent.dispatch(c, &FriendPokeNotifyEvent{
|
||||
Sender: sender,
|
||||
Receiver: receiver,
|
||||
})
|
||||
@ -257,7 +257,7 @@ func msgType0x210Sub44Decoder(c *QQClient, protobuf []byte) error {
|
||||
group.Members = newMem
|
||||
for _, m := range newMem {
|
||||
if lastJoinTime < m.JoinTime {
|
||||
go c.dispatchNewMemberEvent(&MemberJoinGroupEvent{
|
||||
c.GroupMemberJoinEvent.dispatch(c, &MemberJoinGroupEvent{
|
||||
Group: group,
|
||||
Member: m,
|
||||
})
|
||||
|
@ -59,7 +59,7 @@ func (c *QQClient) SendPrivateMessage(target int64, m *message.SendingMessage) *
|
||||
},
|
||||
Elements: m.Elements,
|
||||
}
|
||||
go c.dispatchPrivateMessageSelf(ret)
|
||||
go c.PrivateMessageEvent.dispatch(c, ret)
|
||||
return ret
|
||||
}
|
||||
|
||||
|
@ -443,7 +443,7 @@ func decodeLoginNotifyPacket(c *QQClient, _ *network.IncomingPacketInfo, payload
|
||||
t := ac
|
||||
if ac.AppId == notify.AppId {
|
||||
c.OnlineClients = append(c.OnlineClients, t)
|
||||
c.dispatchOtherClientStatusChangedEvent(&OtherClientStatusChangedEvent{
|
||||
c.OtherClientStatusChangedEvent.dispatch(c, &OtherClientStatusChangedEvent{
|
||||
Client: t,
|
||||
Online: true,
|
||||
})
|
||||
@ -462,7 +462,7 @@ func decodeLoginNotifyPacket(c *QQClient, _ *network.IncomingPacketInfo, payload
|
||||
if rmi != -1 {
|
||||
rmc := c.OnlineClients[rmi]
|
||||
c.OnlineClients = append(c.OnlineClients[:rmi], c.OnlineClients[rmi+1:]...)
|
||||
c.dispatchOtherClientStatusChangedEvent(&OtherClientStatusChangedEvent{
|
||||
c.OtherClientStatusChangedEvent.dispatch(c, &OtherClientStatusChangedEvent{
|
||||
Client: rmc,
|
||||
Online: false,
|
||||
})
|
||||
|
@ -86,12 +86,12 @@ func (c *QQClient) exceptAndDispatchGroupSysMsg() {
|
||||
}
|
||||
for _, msg := range msgs.JoinRequests {
|
||||
if !joinExists(msg.RequestId) {
|
||||
c.dispatchJoinGroupRequest(msg)
|
||||
c.UserWantJoinGroupEvent.dispatch(c, msg)
|
||||
}
|
||||
}
|
||||
for _, msg := range msgs.InvitedRequests {
|
||||
if !invExists(msg.RequestId) {
|
||||
c.dispatchGroupInvitedEvent(msg)
|
||||
c.GroupInvitedEvent.dispatch(c, msg)
|
||||
}
|
||||
}
|
||||
c.groupSysMsgCache = msgs
|
||||
|
@ -55,19 +55,18 @@ func (cache *Cache[_]) Count() int {
|
||||
}
|
||||
|
||||
// Get - return value from cache
|
||||
func (cache *Cache[_]) Get(key string) (interface{}, bool) {
|
||||
func (cache *Cache[T]) Get(key string) (value T, _ bool) {
|
||||
cache.lock.RLock()
|
||||
defer cache.lock.RUnlock()
|
||||
|
||||
e, ok := cache.cache[key]
|
||||
|
||||
if ok && e.expiry.After(time.Now()) {
|
||||
return e.value, true
|
||||
}
|
||||
return nil, false
|
||||
return
|
||||
}
|
||||
|
||||
func (cache *Cache[_]) GetAndUpdate(key string, ttl time.Duration) (interface{}, bool) {
|
||||
func (cache *Cache[T]) GetAndUpdate(key string, ttl time.Duration) (_ T, _ bool) {
|
||||
cache.lock.RLock()
|
||||
defer cache.lock.RUnlock()
|
||||
|
||||
@ -75,7 +74,7 @@ func (cache *Cache[_]) GetAndUpdate(key string, ttl time.Duration) (interface{},
|
||||
e.expiry = time.Now().Add(ttl)
|
||||
return e.value, true
|
||||
}
|
||||
return nil, false
|
||||
return
|
||||
}
|
||||
|
||||
// Add - add key/value in cache
|
||||
|
Loading…
x
Reference in New Issue
Block a user