const User = require("./User.js"); module.exports = class Lobby { /** * @type {User[]} */ users = []; /** * @type {string|undefined} */ leaderId = undefined; running = false; runningInterval = undefined; currentTime = 0; constructor(name) { this.name = name; } run() { this.running = true; this.runningInterval = setInterval(() => { this.currentTime += 1; }, 1000); } pause() { this.running = false; clearInterval(this.runningInterval); } /** * * @returns {boolean} */ hasUsers() { return this.users.length !== 0; } setRandomLeader() { if (this.hasUsers()) { this.leaderId = this.users[0].id; } } /** * * @param {User} user */ addUser(user) { this.users.push(user); } /** * * @param id * @returns {User|undefined} */ getUser(id) { return this.users.find(u => u.id === id); } /** * * @param {string} id */ removeUser(id) { this.users = this.users.filter(u => u.id !== id); } /** * * @returns {boolean} */ hasLeader() { return !!this.leaderId; } /** * * @param {string} id * @returns {boolean} */ isLeader(id) { return this.leaderId === id; } /** * * @param {string} id */ setLeader(id) { if (!this.getUser(id)) { throw new Error('user_not_in_lobby'); } this.leaderId = id; } /** * * @returns {User|undefined} */ getLeader() { return this.users.find(u => u.id === this.leaderId) } };