refactor: 抽离出广播方法

This commit is contained in:
CrescentLeaf
2025-10-25 00:48:24 +08:00
parent 2d78e39ca1
commit 760e5a118a
2 changed files with 31 additions and 17 deletions

View File

@@ -34,4 +34,15 @@ export default abstract class BaseApi {
emitToClient(client: SocketIo.Socket, name: ClientEvent, args: { [key: string]: unknown }) {
client.emit("The_White_Silk", name, args)
}
boardcastToUsers(users: string[], name: ClientEvent, args: { [key: string]: unknown }) {
for (const user of users) {
if (ApiManager.checkUserIsOnline(user)) {
const sockets = ApiManager.getUserClientSockets(user)
for (const socket of Object.keys(sockets))
this.emitToClient(sockets[socket], name, args)
} else {
// TODO: EventStore
}
}
}
}

View File

@@ -58,23 +58,17 @@ export default class ChatApi extends BaseApi {
const id = MessagesManager.getInstanceForChat(chat).addMessage(msg)
const users: string[] = UserChatLinker.getChatMembers(chat.bean.id)
for (const user of users) {
if (ApiManager.checkUserIsOnline(user)) {
const userInst = User.findById(user)
userInst?.updateRecentChat(chat.bean.id, args.text as string)
const sockets = ApiManager.getUserClientSockets(user)
for (const socket of Object.keys(sockets))
this.emitToClient(sockets[socket], 'Client.onMessage', {
chat: chat.bean.id,
msg: {
...msg,
id
}
})
} else {
// TODO: EventStore
users.forEach((id) => {
const userInst = User.findById(id)
userInst?.updateRecentChat(chat.bean.id, args.text as string)
})
this.boardcastToUsers(users, 'Client.onMessage', {
chat: chat.bean.id,
msg: {
...msg,
id
}
}
})
return {
code: 200,
@@ -241,10 +235,19 @@ export default class ChatApi extends BaseApi {
])
} else {
if (action == 'accept') {
const msg = `${user.getNickName()}${admin?.getNickName()} 批准加入了对话`
MessagesManager.getInstanceForChat(chat).addSystemMessage(msg)
const users: string[] = UserChatLinker.getChatMembers(chat.bean.id)
this.boardcastToUsers(users, 'Client.onMessage', {
chat: chat.bean.id,
msg: {
text: msg,
time: Date.now(),
},
})
chat.addMembers([
args.user_id as string,
])
MessagesManager.getInstanceForChat(chat).addSystemMessage(`${user.getNickName()}${admin?.getNickName()} 批准加入了对话`)
}
if (action == 'accept' || action == 'remove')
chat.removeJoinRequests([