topfans/frontend/utils/socket/GlobalSocketManager.js

62 lines
1.6 KiB
JavaScript

import { getAiChatSocket } from './AiChatSocket'
import { getActivitySocket } from './ActivitySocket'
/**
* 全局 WebSocket 管理器
* 统一管理多个服务的 WebSocket 连接
*/
class GlobalSocketManager {
constructor() {
this.sockets = {} // serviceName -> SocketManager
this.token = null
this.isAllConnected = false
}
/**
* 初始化所有连接
*/
init(token) {
this.token = token
this._initAiChat()
this._initActivity()
// Future: this._initNotification()
}
async _initAiChat() {
const aiChat = getAiChatSocket()
aiChat.on('connect', () => console.log('AI Chat connected'))
aiChat.on('error', (err) => console.error('AI Chat error:', err))
await aiChat.connect(this.token)
this.sockets['ai_chat'] = aiChat
}
async _initActivity() {
const activity = getActivitySocket()
activity.on('connect', () => console.log('Activity socket connected'))
activity.on('error', (err) => console.error('Activity socket error:', err))
if (this.token) {
await activity.connect(this.token)
}
this.sockets['activity'] = activity
}
getSocket(serviceName) {
return this.sockets[serviceName]
}
closeAll() {
Object.values(this.sockets).forEach(socket => socket.close())
this.sockets = {}
}
}
let globalInstance = null
export function getGlobalSocket() {
if (!globalInstance) {
globalInstance = new GlobalSocketManager()
}
return globalInstance
}
export default GlobalSocketManager