buzzers/room.js

68 lines
1.5 KiB
JavaScript

const chars = require('./characters.json');
const rooms = {};
function shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i], a[j]] = [a[j], a[i]];
}
return a;
}
function getOrCreateRoom(roomId) {
let room = rooms[roomId];
if (!room) {
room = {
roomId: roomId,
participants: [],
audience: [],
characters: shuffle(chars)
};
rooms[roomId] = room;
}
return room;
}
function addParticipant(roomId, participantId, participantName) {
let room = getOrCreateRoom(roomId);
room.participants.push({
participantId,
participantName,
character: room.characters[room.participants.length]
});
rooms[roomId] = room;
}
function addParticipantWS(roomId, participantId, ws) {
let room = getOrCreateRoom(roomId);
room.participants.find(p => p.participantId === participantId).ws = ws;
}
function addAudienceWS(roomId, ws) {
let room = getOrCreateRoom(roomId);
room.audience.push(ws);
}
function buzz(roomId, participant) {
let room = getOrCreateRoom(roomId);
room.participants.forEach(p => {
if (p.ws) {
p.ws.send(JSON.stringify({
type: "buzz",
participant: participant.participantName
}));
}
});
room.audience.forEach(ws => {
ws.send(JSON.stringify({
type: "buzz",
participant: participant
}));
});
}
module.exports = {getOrCreateRoom, addParticipant, addParticipantWS, addAudienceWS, buzz}