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