File size: 1,232 Bytes
07ed12b
 
 
 
5c0862e
07ed12b
dd96d2f
 
 
 
 
 
07ed12b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { io, type Socket } from 'socket.io-client';

let _socket: Socket | null = null;

export function backendUrl(): string {
  if (typeof window === 'undefined') return 'http://localhost:8000';
  // VITE_BACKEND_URL overrides (e.g. for dev: http://localhost:8000).
  // In dev, use backend origin so /static and /sprites are served correctly (proxy can return HTML otherwise).
  if (import.meta.env.VITE_BACKEND_URL) return import.meta.env.VITE_BACKEND_URL;
  const origin = window.location.origin;
  if (origin === 'http://localhost:5173' || origin === 'http://127.0.0.1:5173') return 'http://localhost:8000';
  return origin;
}

export function getSocket(): Socket {
  if (!_socket) {
    _socket = io(backendUrl(), {
      transports: ['websocket', 'polling'],
      reconnectionAttempts: 5,
      reconnectionDelay: 1500,
    });

    _socket.on('connect', () => console.log('[socket] connected', _socket?.id));
    _socket.on('disconnect', (reason) => console.log('[socket] disconnected', reason));
    _socket.on('connect_error', (err) => console.error('[socket] error', err.message));
  }
  return _socket;
}

export function disconnectSocket(): void {
  if (_socket) {
    _socket.disconnect();
    _socket = null;
  }
}