E5K7's picture
Initial commit: Rebranded to GLMPilot and migrated to GLM-5 API
c2c8c8d
import { io, Socket } from 'socket.io-client';
const WS_URL = import.meta.env.VITE_WS_URL || '';
const WS_SESSION_KEY = 'glmpilot:ws-session';
function getWebSocketSessionId(): string {
try {
const existing = sessionStorage.getItem(WS_SESSION_KEY);
if (existing) return existing;
const id = crypto.randomUUID();
sessionStorage.setItem(WS_SESSION_KEY, id);
return id;
} catch {
return `tab-${Date.now()}-${Math.random().toString(36).slice(2)}`;
}
}
let socket: Socket | null = null;
export function getSocket(): Socket {
if (!socket) {
const sessionId = getWebSocketSessionId();
socket = io(WS_URL, {
query: { sessionId },
auth: { sessionId },
transports: ['websocket', 'polling'],
reconnection: true,
reconnectionAttempts: 10,
reconnectionDelay: 1000,
reconnectionDelayMax: 5000,
autoConnect: true,
});
socket.on('connect', () => {
console.log('WebSocket connected:', socket?.id);
});
socket.on('disconnect', (reason) => {
console.log('WebSocket disconnected:', reason);
});
socket.on('connect_error', (error) => {
console.warn('WebSocket connection error:', error.message);
});
}
return socket;
}
export function disconnectSocket() {
if (socket) {
socket.disconnect();
socket = null;
}
}