import { Server as Skio } from "socket.io"; import evt from "../../common/sockets/events.js"; import modes from "../../common/sockets/modes.js"; import { initiator, executor, viewer } from "./client-listeners.js"; const socketDrop = (io, room, id) => { const { rooms } = io.of("/").adapter; const clients = rooms.get(room); if (clients.size > 1 || clients.size === 0) return; const socketId = Array.from(clients)[0]; const s = io.sockets.sockets.get(socketId); s.disconnect(); }; const socketConnect = async (io, socket, jobs) => { const { mode } = socket.handshake.query; try { switch (mode) { case modes.INIT: await initiator(socket, jobs); break; case modes.EXEC: executor(io, socket, jobs); break; case modes.VIEW: viewer(socket); break; default: socket.send(evt.ERR, "Invalid Mode!"); socket.disconnect(); break; } } catch (err) { console.log(err); socket.send(evt.ERR, err); socket.disconnect(); } }; const socketAuth = (socket, next) => { const { token } = socket.handshake.auth; // next(new Error("Bad Token")); next(); }; const applySockets = (server, jobs, options) => { const io = new Skio(server); io.on("connection", (socket) => socketConnect(io, socket, jobs)); io.of("/").adapter.on("leave-room", (room, id) => socketDrop(io, room, id)); return io; cle; }; export default applySockets;