diff --git a/app/src/RoomClient.js b/app/src/RoomClient.js index 8dbc9d1..8a502be 100644 --- a/app/src/RoomClient.js +++ b/app/src/RoomClient.js @@ -1963,6 +1963,13 @@ export default class RoomClient break; } + case 'overRoomLimit': + { + store.dispatch(roomActions.setOverRoomLimit(true)); + + break; + } + case 'roomReady': { const { turnServers } = notification.data; diff --git a/app/src/actions/roomActions.js b/app/src/actions/roomActions.js index 30ce37c..b90bf1b 100644 --- a/app/src/actions/roomActions.js +++ b/app/src/actions/roomActions.js @@ -40,6 +40,12 @@ export const setSignInRequired = (signInRequired) => payload : { signInRequired } }); +export const setOverRoomLimit = (overRoomLimit) => + ({ + type : 'SET_OVER_ROOM_LIMIT', + payload : { overRoomLimit } + }); + export const setAccessCode = (accessCode) => ({ type : 'SET_ACCESS_CODE', diff --git a/app/src/components/JoinDialog.js b/app/src/components/JoinDialog.js index a8493db..3308622 100644 --- a/app/src/components/JoinDialog.js +++ b/app/src/components/JoinDialog.js @@ -83,6 +83,10 @@ const styles = (theme) => green : { color : 'rgba(0, 153, 0, 1)' + }, + red : + { + color : 'rgba(153, 0, 0, 1)' } }); @@ -281,6 +285,16 @@ const JoinDialog = ({ }} fullWidth /> + {!room.inLobby && room.overRoomLimit && + + + + } @@ -419,6 +433,7 @@ export default withRoomContext(connect( return ( prev.room.inLobby === next.room.inLobby && prev.room.signInRequired === next.room.signInRequired && + prev.room.overRoomLimit === next.room.overRoomLimit && prev.settings.displayName === next.settings.displayName && prev.me.displayNameInProgress === next.me.displayNameInProgress && prev.me.loginEnabled === next.me.loginEnabled && diff --git a/app/src/reducers/room.js b/app/src/reducers/room.js index f4bc6ab..6d47d42 100644 --- a/app/src/reducers/room.js +++ b/app/src/reducers/room.js @@ -6,6 +6,7 @@ const initialState = locked : false, inLobby : false, signInRequired : false, + overRoomLimit : false, // access code to the room if locked and joinByAccessCode == true accessCode : '', // if true: accessCode is a possibility to open the room @@ -88,7 +89,12 @@ const room = (state = initialState, action) => return { ...state, signInRequired }; } + case 'SET_OVER_ROOM_LIMIT': + { + const { overRoomLimit } = action.payload; + return { ...state, overRoomLimit }; + } case 'SET_ACCESS_CODE': { const { accessCode } = action.payload; diff --git a/app/src/translations/cn.json b/app/src/translations/cn.json index f26d3c5..e3b5597 100644 --- a/app/src/translations/cn.json +++ b/app/src/translations/cn.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/cs.json b/app/src/translations/cs.json index 4c6eda8..fd3cc3c 100644 --- a/app/src/translations/cs.json +++ b/app/src/translations/cs.json @@ -58,6 +58,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/de.json b/app/src/translations/de.json index 63bece8..8a119ad 100644 --- a/app/src/translations/de.json +++ b/app/src/translations/de.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": "Du bist stummgeschalted, Halte die SPACE-Taste um zu sprechen", diff --git a/app/src/translations/dk.json b/app/src/translations/dk.json index 7228963..40e2698 100644 --- a/app/src/translations/dk.json +++ b/app/src/translations/dk.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/el.json b/app/src/translations/el.json index dfc1f86..2600ab2 100644 --- a/app/src/translations/el.json +++ b/app/src/translations/el.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/en.json b/app/src/translations/en.json index 0f38032..758e9f0 100644 --- a/app/src/translations/en.json +++ b/app/src/translations/en.json @@ -59,6 +59,7 @@ "room.raisedHand": "{displayName} raised their hand", "room.loweredHand": "{displayName} put their hand down", "room.extraVideo": "Extra video", + "room.overRoomLimit": null, "me.mutedPTT": "You are muted, hold down SPACE-BAR to talk", diff --git a/app/src/translations/es.json b/app/src/translations/es.json index 2d42660..4c8abea 100644 --- a/app/src/translations/es.json +++ b/app/src/translations/es.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/fr.json b/app/src/translations/fr.json index 753e8f3..9148655 100644 --- a/app/src/translations/fr.json +++ b/app/src/translations/fr.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/hr.json b/app/src/translations/hr.json index ca803be..88596a6 100644 --- a/app/src/translations/hr.json +++ b/app/src/translations/hr.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": "Utišani ste, pritisnite i držite SPACE tipku za razgovor", diff --git a/app/src/translations/hu.json b/app/src/translations/hu.json index 43228fa..e21ebf3 100644 --- a/app/src/translations/hu.json +++ b/app/src/translations/hu.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/it.json b/app/src/translations/it.json index 8126d6f..2c2e01a 100644 --- a/app/src/translations/it.json +++ b/app/src/translations/it.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/nb.json b/app/src/translations/nb.json index d95a866..38ccd74 100644 --- a/app/src/translations/nb.json +++ b/app/src/translations/nb.json @@ -59,6 +59,7 @@ "room.raisedHand": "{displayName} rakk opp hånden", "room.loweredHand": "{displayName} tok ned hånden", "room.extraVideo": "Ekstra video", + "room.overRoomLimit": null, "me.mutedPTT": "Du er dempet, hold nede SPACE for å snakke", diff --git a/app/src/translations/pl.json b/app/src/translations/pl.json index d366cf3..14f5146 100644 --- a/app/src/translations/pl.json +++ b/app/src/translations/pl.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/pt.json b/app/src/translations/pt.json index 867a3e5..89a8da1 100644 --- a/app/src/translations/pt.json +++ b/app/src/translations/pt.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/ro.json b/app/src/translations/ro.json index ed8b24f..49936b0 100644 --- a/app/src/translations/ro.json +++ b/app/src/translations/ro.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/tr.json b/app/src/translations/tr.json index 3d1b83b..3fb115f 100644 --- a/app/src/translations/tr.json +++ b/app/src/translations/tr.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/app/src/translations/uk.json b/app/src/translations/uk.json index 9b4c4b5..6c15f7a 100644 --- a/app/src/translations/uk.json +++ b/app/src/translations/uk.json @@ -59,6 +59,7 @@ "room.raisedHand": null, "room.loweredHand": null, "room.extraVideo": null, + "room.overRoomLimit": null, "me.mutedPTT": null, diff --git a/server/config/config.example.js b/server/config/config.example.js index e8960f7..5b47582 100644 --- a/server/config/config.example.js +++ b/server/config/config.example.js @@ -247,6 +247,8 @@ module.exports = // When truthy, the room will be open to all users when as long as there // are allready users in the room activateOnHostJoin : true, + // When set, maxUsersPerRoom defines how many users can join a single room. If not set, there is not limit. + // maxUsersPerRoom : 20, // Room size before spreading to new router routerScaleSize : 20, // Mediasoup settings diff --git a/server/lib/Room.js b/server/lib/Room.js index 6067e75..ec8febf 100644 --- a/server/lib/Room.js +++ b/server/lib/Room.js @@ -214,6 +214,10 @@ class Room extends EventEmitter peer.roles.some((role) => accessFromRoles.BYPASS_ROOM_LOCK.includes(role)) ) this._peerJoining(peer); + else if ('maxUsersPerRoom' in config &&(this._getJoinedPeers().length + this._lobby.peerList().length) >= config.maxUsersPerRoom) + { + this._handleOverRoomLimit(peer); + } else if (this._locked) this._parkPeer(peer); else @@ -225,6 +229,11 @@ class Room extends EventEmitter } } + _handleOverRoomLimit(peer) + { + this._notification(peer.socket, 'overRoomLimit'); + } + _handleGuest(peer) { if (config.activateOnHostJoin && !this.checkEmpty())