brandgrandprix / client /src /network.js
Pushkar Pandey
Initial game commit
84b2c31
Raw
History Blame Contribute Delete
1.27 kB
import { io } from 'socket.io-client';
let socket = null;
const handlers = {};
export function connect(serverUrl) {
socket = io(serverUrl, {
transports: ['websocket', 'polling'],
reconnectionAttempts: 5,
});
socket.on('connect', () => {
console.log('[net] connected', socket.id);
emit('_connected');
});
socket.on('disconnect', () => {
console.log('[net] disconnected');
emit('_disconnected');
});
// Forward all server events to local listeners
const serverEvents = [
'room_state',
'player_joined',
'player_left',
'car_update',
'race_countdown',
'race_start',
'race_standings',
'race_finish',
'checkpoint_ack',
'stats',
];
for (const evt of serverEvents) {
socket.on(evt, data => emit(evt, data));
}
}
export function send(event, data) {
if (socket) socket.emit(event, data);
}
export function on(event, fn) {
if (!handlers[event]) handlers[event] = [];
handlers[event].push(fn);
}
export function off(event, fn) {
if (!handlers[event]) return;
handlers[event] = handlers[event].filter(h => h !== fn);
}
export function getSocketId() {
return socket?.id;
}
function emit(event, data) {
const fns = handlers[event];
if (fns) fns.forEach(fn => fn(data));
}