const service = require("./service.js"); const state = require("./State.js"); const {io} = require('./app.js'); io.on('connection', socket => { const socketId = socket.id; console.log('a user connected', socketId); const lobby = state.createRandomLobby(); service.joinLobby(socketId, lobby.name); socket.join(lobby.name); socket.emit('welcome', {lobby: lobby}); socket.on('disconnect', (reason) => { console.log('Disconnected:', socketId); service.leaveLobby(socketId); }); socket.on('join_lobby', (lobbyId, callback) => { if (!callback || typeof callback !== 'function') { console.error("Join: Callback not a function."); return } if (!lobbyId) { return callback('no_lobby_id_given'); } if (!Number.isSafeInteger(+lobbyId)) { return callback('lobby_id_not_integer'); } console.log(`${socketId} wants to join '${lobbyId}'.`); // Leave current lobby first service.leaveLobby(socketId); const lobby = service.joinLobby(socketId, lobbyId); socket.join(lobby.name); callback(null, { status: 'ok', lobby: lobby }); }); socket.on('lobby_info', callback => { if (!callback || typeof callback !== 'function') { console.error("Lobby info: Callback not a function."); return } const lobby = service.getUserLobby(socketId); callback(null, { status: 'ok', lobby: lobby }); }); socket.on('request_start', (time = null) => { console.log('request start', socket.rooms); const lobby = service.getUserLobby(socketId); if (!lobby.isLeader(socketId)) { console.warn("Non leader tried to start."); return; } io.to(lobby.name + "").emit('started'); lobby.run(io); if (typeof time === 'number' && time) { console.log("Starting at", time); lobby.seek(io, time); } }); });