import { Server } from "socket.io"; import { port } from "./config.js"; import * as events from "./events.js"; const server = new Server(port); console.debug(`Listening on port ${port}`); const rooms = {}; server.on(events.types.CONNECTION, (socket) => { const me = socket.id; console.debug(`[CONNECT] New client connected with ID ${me}`); socket.on(events.types.JOIN, async ({ room }) => { socket.join(room); if (!rooms[room]) { rooms[room] = []; } rooms[room].push(socket.id); const sockets = await server.in(room).fetchSockets(); sockets.forEach((peer) => { if (peer.id !== me) { events.addPeer(me, false)(peer); events.addPeer(peer.id, true)(socket); } }); }); socket.on(events.types.DISCONNECTING, () => { for (const room in rooms) { if (rooms[room].includes(me)) { rooms[room] = rooms[room].filter((id) => id !== me); events.removePeer(me)(socket.to(room)); if (rooms[room].length === 0) { delete rooms[room]; } } } }); socket.on(events.types.RELAY_ICE_CANDIDATE, async ({ candidate, peerId }) => { events.ICECandidateReceived(me, candidate)(socket.to(peerId)); }); socket.on(events.types.RELAY_OFFER, async ({ offer, peerId }) => { events.offerReceived(me, offer)(socket.to(peerId)); }); socket.on(events.types.RELAY_ANSWER, async ({ answer, peerId }) => { events.answerReceived(me, answer)(socket.to(peerId)); }); });