增加admin, mobile 消息io连接

This commit is contained in:
yourname
2025-05-15 09:18:21 +00:00
parent dea7ec5316
commit 2f171d4335
5 changed files with 201 additions and 8 deletions

View File

@@ -17,6 +17,83 @@ interface MessageListData {
}
export function setupMessageEvents({ socket , apiClient }:Variables) {
// 订阅频道
socket.on('message:subscribe', (channel: string) => {
try {
socket.join(channel);
socket.emit('message:subscribed', {
message: `成功订阅频道: ${channel}`,
channel
});
} catch (error) {
console.error('订阅频道失败:', error);
socket.emit('error', '订阅频道失败');
}
});
// 取消订阅
socket.on('message:unsubscribe', (channel: string) => {
try {
socket.leave(channel);
socket.emit('message:unsubscribed', {
message: `已取消订阅频道: ${channel}`,
channel
});
} catch (error) {
console.error('取消订阅失败:', error);
socket.emit('error', '取消订阅失败');
}
});
// 广播消息
socket.on('message:broadcast', async (data: {
channel?: string;
title: string;
content: string;
type: MessageType;
}) => {
try {
const { channel, title, content, type } = data;
const user = socket.user;
if (!user) {
socket.emit('error', '未授权访问');
return;
}
// 创建广播消息
const [messageId] = await apiClient.database.table('messages').insert({
title,
content,
type,
sender_id: user.id,
sender_name: user.username,
is_broadcast: 1,
created_at: apiClient.database.fn.now(),
updated_at: apiClient.database.fn.now()
});
// 广播到所有客户端或特定频道
const broadcastTarget = channel ? socket.to(channel) : socket.broadcast;
broadcastTarget.emit('message:broadcasted', {
id: messageId,
title,
content,
type,
sender_id: user.id,
sender_name: user.username,
created_at: new Date().toISOString()
});
socket.emit('message:broadcasted', {
message: '广播消息发送成功',
data: { id: messageId }
});
} catch (error) {
console.error('广播消息失败:', error);
socket.emit('error', '广播消息失败');
}
});
// 发送消息
socket.on('message:send', async (data: MessageSendData) => {
try {