From 3a565362a28964c5b3ca152ec3137682863fc76d Mon Sep 17 00:00:00 2001 From: Gregoire Parant Date: Wed, 21 Oct 2020 23:45:08 +0200 Subject: [PATCH] Simple limit connexion in room --- back/src/Controller/IoSocketController.ts | 3 +++ back/src/Enum/EnvironmentVariable.ts | 2 ++ back/src/Model/GameRoom.ts | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/back/src/Controller/IoSocketController.ts b/back/src/Controller/IoSocketController.ts index f6253be5..0ae6465f 100644 --- a/back/src/Controller/IoSocketController.ts +++ b/back/src/Controller/IoSocketController.ts @@ -163,6 +163,9 @@ export class IoSocketController { let memberTags: string[] = []; let memberTextures: CharacterTexture[] = []; const room = await socketManager.getOrCreateRoom(roomId); + if(room.isFull){ + throw new Error('Room is full'); + } try { const userData = await adminApi.fetchMemberDataByUuid(userUuid); //console.log('USERDATA', userData) diff --git a/back/src/Enum/EnvironmentVariable.ts b/back/src/Enum/EnvironmentVariable.ts index 0d4f5ed2..56c49284 100644 --- a/back/src/Enum/EnvironmentVariable.ts +++ b/back/src/Enum/EnvironmentVariable.ts @@ -5,6 +5,7 @@ const GROUP_RADIUS = process.env.GROUP_RADIUS ? Number(process.env.GROUP_RADIUS) const ALLOW_ARTILLERY = process.env.ALLOW_ARTILLERY ? process.env.ALLOW_ARTILLERY == 'true' : false; const ADMIN_API_URL = process.env.ADMIN_API_URL || 'http://admin'; const ADMIN_API_TOKEN = process.env.ADMIN_API_TOKEN || 'myapitoken'; +const MAX_USERS_PER_ROOM = parseInt(process.env.MAX_USERS_PER_ROOM || '') || 600; const CPU_OVERHEAT_THRESHOLD = Number(process.env.CPU_OVERHEAT_THRESHOLD) || 80; const JITSI_URL : string|undefined = (process.env.JITSI_URL === '') ? undefined : process.env.JITSI_URL; const JITSI_ISS = process.env.JITSI_ISS || ''; @@ -16,6 +17,7 @@ export { MINIMUM_DISTANCE, ADMIN_API_URL, ADMIN_API_TOKEN, + MAX_USERS_PER_ROOM, GROUP_RADIUS, ALLOW_ARTILLERY, CPU_OVERHEAT_THRESHOLD, diff --git a/back/src/Model/GameRoom.ts b/back/src/Model/GameRoom.ts index 5efde159..e0474e1d 100644 --- a/back/src/Model/GameRoom.ts +++ b/back/src/Model/GameRoom.ts @@ -10,6 +10,7 @@ import {ViewportInterface} from "_Model/Websocket/ViewportMessage"; import {Movable} from "_Model/Movable"; import {extractDataFromPrivateRoomId, extractRoomSlugPublicRoomId, isRoomAnonymous} from "./RoomIdentifier"; import {arrayIntersect} from "../Services/ArrayHelper"; +import {MAX_USERS_PER_ROOM} from "../Enum/EnvironmentVariable"; export type ConnectCallback = (user: User, group: Group) => void; export type DisconnectCallback = (user: User, group: Group) => void; @@ -108,6 +109,10 @@ export class GameRoom { } } + get isFull(): boolean { + return this.users.size >= MAX_USERS_PER_ROOM; + } + public isEmpty(): boolean { return this.users.size === 0; }