diff --git a/app/src/Room.js b/app/src/Room.js index 102991c0..6249372c 100644 --- a/app/src/Room.js +++ b/app/src/Room.js @@ -108,6 +108,10 @@ module.exports = class Room { return this.peers; } + getPeersCount() { + return this.peers.size; + } + toJson() { return { id: this.id, diff --git a/app/src/Server.js b/app/src/Server.js index da040c83..ba578032 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -469,6 +469,16 @@ io.on('connection', (socket) => { } }); + socket.on('getPeerCounts', async ({}, callback) => { + if (!roomList.has(socket.room_id)) return; + + let peerCounts = roomList.get(socket.room_id).getPeersCount(); + + log.debug('Peer counts', { peerCounts: peerCounts }); + + callback({ peerCounts: peerCounts }); + }); + socket.on('roomAction', (data) => { if (!roomList.has(socket.room_id)) return; diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 67844cad..ed25fa73 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -3193,9 +3193,22 @@ class RoomClient { switch (action) { case 'lock': if (room_password) { - data.password = room_password; - this.socket.emit('roomAction', data); - this.roomStatus(action); + this.socket + .request('getPeerCounts') + .then( + async function (data) { + // Only the presenter can lock the room + if (isPresenter || data.peerCounts == 1) { + isPresenter = true; + data.password = room_password; + this.socket.emit('roomAction', data); + this.roomStatus(action); + } + }.bind(this), + ) + .catch((err) => { + console.log('Get peer counts:', err); + }); } else { Swal.fire({ allowOutsideClick: false,