@@ -11,37 +11,40 @@ import Match from '#matchmaking/match';
11
11
12
12
// note: only create lobbies with createLobby(), don't call the constructor directly
13
13
export function lobbyCreate ( map :GameMap ) { // returns the lobby instance
14
+ if ( Object . keys ( global . lobbies ) . length > 900000 ) return null ;
15
+
14
16
let lobby = new Lobby ( map ) ;
15
17
18
+ // get the ID
16
19
while ( true ) {
17
20
// a random 6-digit number
18
- let lobbyid = crypto . randomInt ( 100000 , 999999 ) . toString ( ) ;
19
- if ( lobbyid in global . lobbies ) { // just in case of a collision
21
+ let lobby_id = crypto . randomInt ( 100000 , 999999 ) . toString ( ) ;
22
+ if ( lobby_id in global . lobbies ) { // just in case of a collision
20
23
continue ;
21
24
}
22
25
else {
23
- global . lobbies [ lobbyid ] = lobby ;
24
- lobby . lobbyid = lobbyid ;
26
+ global . lobbies [ lobby_id ] = lobby ;
27
+ lobby . lobby_id = lobby_id ;
25
28
break ;
26
29
}
27
30
}
28
31
29
32
return lobby ;
30
33
}
31
34
32
- export function lobbyFind ( lobbyid :string ) {
33
- return global . lobbies [ lobbyid ] ;
35
+ export function lobbyFind ( lobby_id :string ) {
36
+ return global . lobbies [ lobby_id ] ;
34
37
}
35
38
36
- export function lobbyExists ( lobbyid :string ) {
37
- return global . lobbies . hasOwnProperty ( lobbyid ) ;
39
+ export function lobbyExists ( lobby_id :string ) {
40
+ return global . lobbies . hasOwnProperty ( lobby_id ) ;
38
41
}
39
42
40
- export function lobbyDelete ( lobbyid :string ) {
41
- let lobby = global . lobbies [ lobbyid ] ;
43
+ export function lobbyDelete ( lobby_id :string ) {
44
+ let lobby = global . lobbies [ lobby_id ] ;
42
45
lobby . close ( ) ;
43
46
44
- delete global . lobbies [ lobbyid ] ;
47
+ delete global . lobbies [ lobby_id ] ;
45
48
}
46
49
47
50
export function lobbyList ( ) :Lobby [ ] {
@@ -51,7 +54,7 @@ export function lobbyList():Lobby[] {
51
54
export type LobbyStatus = 'open' | 'closed' ;
52
55
53
56
export type SerializedLobby = {
54
- lobbyid : string ,
57
+ lobby_id : string ,
55
58
status : LobbyStatus ,
56
59
max_players : number ,
57
60
player_count : number ,
@@ -60,7 +63,7 @@ export type SerializedLobby = {
60
63
}
61
64
62
65
export type LobbyInfo = {
63
- lobbyid : string ,
66
+ lobby_id : string ,
64
67
status : LobbyStatus ,
65
68
max_players : number ,
66
69
player_count : number ,
@@ -72,7 +75,7 @@ export type LobbyInfo = {
72
75
73
76
// in context of an MMO this is a shard/separated world
74
77
export default class Lobby extends EventEmitter {
75
- lobbyid :string = '-1' ; // assigned when created
78
+ lobby_id :string = '-1' ; // assigned when created
76
79
status :LobbyStatus = 'open' ;
77
80
/** @type {Client[] } */
78
81
players :Client [ ] = [ ] ;
@@ -242,7 +245,7 @@ export default class Lobby extends EventEmitter {
242
245
// (e.x. we don't want to send functions and everything about every player)
243
246
serialize ( ) :SerializedLobby {
244
247
return {
245
- lobbyid : this . lobbyid ,
248
+ lobby_id : this . lobby_id ,
246
249
rooms : global . config . rooms_enabled
247
250
? this . rooms . map ( r => r . serialize ( ) )
248
251
: undefined ,
@@ -255,7 +258,7 @@ export default class Lobby extends EventEmitter {
255
258
256
259
getInfo ( ) :LobbyInfo {
257
260
return {
258
- lobbyid : this . lobbyid ,
261
+ lobby_id : this . lobby_id ,
259
262
rooms : global . config . rooms_enabled
260
263
? this . rooms . map ( r => r . getInfo ( ) )
261
264
: undefined ,
0 commit comments