import { io, Socket } from 'socket.io-client'; const SOCKET_URL = import.meta.env.VITE_API_URL || 'http://localhost:5000'; class SocketService { private socket: Socket | null = null; connect(token: string): Socket { if (this.socket?.connected) { return this.socket; } this.socket = io(SOCKET_URL, { autoConnect: false, }); this.socket.connect(); // 连接成功后发送认证信息 this.socket.on('connect', () => { console.log('Socket连接成功'); this.socket?.emit('join', { token }); }); this.socket.on('disconnect', () => { console.log('Socket连接断开'); }); this.socket.on('error', (error) => { console.error('Socket错误:', error); }); return this.socket; } disconnect(): void { if (this.socket) { this.socket.disconnect(); this.socket = null; } } getSocket(): Socket | null { return this.socket; } sendMessage(content: string, room: string = 'general'): void { if (this.socket?.connected) { this.socket.emit('sendMessage', { content, room }); } } onNewMessage(callback: (message: any) => void): void { this.socket?.on('newMessage', callback); } onUserJoined(callback: (user: any) => void): void { this.socket?.on('userJoined', callback); } onUserLeft(callback: (user: any) => void): void { this.socket?.on('userLeft', callback); } onOnlineUsers(callback: (users: any[]) => void): void { this.socket?.on('onlineUsers', callback); } offAllListeners(): void { this.socket?.removeAllListeners(); } } export const socketService = new SocketService(); export default socketService;