增加admin, mobile 消息io连接
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user