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; } const ioLobby = io.to(lobby.name + ""); ioLobby.emit('started'); lobby.run(ioLobby); if (typeof time === 'number' && time) { console.log("Starting at", time); lobby.seek(ioLobby, time); } }); });