50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
import { getAiChatSocket } from './AiChatSocket'
|
|
|
|
/**
|
|
* 全局 WebSocket 管理器
|
|
* 统一管理多个服务的 WebSocket 连接
|
|
*/
|
|
class GlobalSocketManager {
|
|
constructor() {
|
|
this.sockets = {} // serviceName -> SocketManager
|
|
this.token = null
|
|
this.isAllConnected = false
|
|
}
|
|
|
|
/**
|
|
* 初始化所有连接
|
|
*/
|
|
init(token) {
|
|
this.token = token
|
|
this._initAiChat()
|
|
// 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
|
|
}
|
|
|
|
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 |