Kopie van https://gitlab.com/studieverenigingvia/ict/centurion met een paar aanpassingen
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
centurion/backend/src/index.js

81 lines
2.1 KiB

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);
}
});
});