1
+ 'use strict' ;
2
+
1
3
var net = require ( "net" )
2
- , logger = require ( 'winston' )
3
- , config = require ( '../config' ) ;
4
+ , bunyan = require ( 'bunyan' )
5
+ , config = require ( '../config' )
6
+ , log = bunyan . createLogger ( { name : "lobby" } ) ;
4
7
5
8
var GameServer = require ( './GameServer' ) ,
6
9
MultiplayerServer = require ( './MultiplayerServer' ) ;
7
10
8
- function LobbyServer ( ) {
11
+ class LobbyServer {
12
+ constructor ( ) {
9
13
this . history = [ ] ; // Chat history buffer
10
14
this . rooms = [ ] ; // Array of room data
11
15
this . userIds = [ ] ; // Array of currently in use IDs
@@ -17,80 +21,78 @@ function LobbyServer() {
17
21
18
22
this . port = config . gamePort ;
19
23
20
- this . server = new MultiplayerServer ( ) ;
21
-
22
- var server = this . server ;
23
- var lobby = this ;
24
+ var server = new MultiplayerServer ( ) ;
25
+ this . server = server ;
24
26
25
- server . on ( 'connection' , function ( user ) {
26
- logger . info ( 'Connection from ' + user . socket . address ( ) . address ) ;
27
+ server . on ( 'connection' , user => {
28
+ log . info ( 'Connection from %s' , user . socket . address ( ) . address ) ;
27
29
28
- user . id = lobby . getUniqueId ( ) ;
30
+ user . id = this . getUniqueId ( ) ;
29
31
user . name = "User" ;
30
32
user . fullname = user . name + '`' + user . id ;
31
33
user . room = 'none' ;
32
34
33
35
user . admin = false ;
34
36
35
- lobby . rooms [ 'none' ] . users . push ( user ) ;
37
+ this . rooms [ 'none' ] . users . push ( user ) ;
36
38
} ) ;
37
39
38
- server . on ( 'data' , function ( user , data ) {
40
+ server . on ( 'data' , ( user , data ) => {
39
41
switch ( data [ 0 ] ) {
40
42
case 'r' : // User name
41
43
user . name = data . substr ( 1 ) ;
42
44
user . fullname = user . name + '`' + user . id ;
43
45
user . write ( 'd' + user . id , 'g' ) ; // User ID, dequeue
44
46
break ;
45
-
47
+
46
48
case 'q' : // Quit game room
47
- if ( lobby . rooms [ user . room ] . started ) {
49
+ if ( this . rooms [ user . room ] . started ) {
48
50
var room = user . room ;
49
51
50
- lobby . rooms [ room ] . started = false ;
51
- lobby . rooms [ room ] . users . forEach ( function ( roomUser ) {
52
+ this . rooms [ room ] . started = false ;
53
+ this . rooms [ room ] . users . forEach ( roomUser => {
52
54
server . writeAll ( 'l' + roomUser . room + '`' + roomUser . fullname ) ;
53
55
roomUser . room = 'none' ;
54
56
} ) ;
55
-
57
+
56
58
server . writeAll ( 'r' + room ) ;
57
- lobby . rooms [ room ] . users = [ ] ;
59
+ this . rooms [ room ] . users = [ ] ;
58
60
}
59
61
60
62
user . write ( 'g' ) ;
61
63
break ;
62
-
64
+
63
65
case 'o' : // Join lobby
64
66
user . writeOthers ( 'j' + user . room + '`' + user . fullname ) ;
65
- server . each ( function ( u ) {
67
+ server . each ( u => {
66
68
user . write ( 'j' + u . room + '`' + u . fullname ) ;
67
69
} ) ;
68
70
69
- user . write . apply ( user , lobby . history ) ;
71
+ user . write . apply ( user , this . history ) ;
70
72
71
- for ( var i in lobby . rooms ) {
72
- if ( lobby . rooms [ i ] . started ) {
73
+ for ( var i in this . rooms ) {
74
+ if ( this . rooms [ i ] . started ) {
73
75
user . write ( 's' + i ) ;
74
76
}
75
77
}
76
78
break ;
77
-
79
+
78
80
case 'c' : // Chat
79
81
var chat = data . substr ( 1 ) ;
80
82
81
83
if ( chat . substr ( 0 , user . name . length + 9 ) == '<b>' + user . name + '</b>: ' ) {
82
84
server . emit ( 'chat' , user , chat . substr ( user . name . length + 9 ) ) ;
83
85
} else {
84
- logger . warn ( 'Malformed chat from ' + user . fullname + ' ' + chat ) ;
86
+ log . warn ( 'Malformed chat from %s %s' , user . fullname , chat ) ;
85
87
}
86
88
break ;
87
-
89
+
88
90
case 'j' : // Join room
89
91
// There's a bit of a bug-fix in the client here.
90
92
// If the client requests an invalid room, the client still waits for a "join room" response from the server
91
93
// Even worse, if they're in the "none" room, sending them to the current room doesn't unlock the client.
92
94
// So to work around this, we move them to their current room, or the room they requested then back if they're in "none".
93
- if ( ! lobby . isValidRoom ( data . substr ( 1 ) ) ) {
95
+ if ( ! this . isValidRoom ( data . substr ( 1 ) ) ) {
94
96
if ( user . room == 'none' )
95
97
user . write ( 'j' + data . substr ( 1 ) + '`' + user . fullname ) ;
96
98
@@ -99,37 +101,37 @@ function LobbyServer() {
99
101
break ;
100
102
}
101
103
102
- lobby . rooms [ user . room ] . removeUser ( user ) ;
104
+ this . rooms [ user . room ] . removeUser ( user ) ;
103
105
server . writeAll ( 'l' + user . room + '`' + user . fullname ) ;
104
106
105
107
user . room = data . substr ( 1 ) ;
106
- lobby . rooms [ user . room ] . users . push ( user )
108
+ this . rooms [ user . room ] . users . push ( user )
107
109
server . writeAll ( 'j' + user . room + '`' + user . fullname ) ;
108
110
break ;
109
-
111
+
110
112
case 's' : // Start game
111
113
var room = parseInt ( user . room ) ;
112
114
113
- lobby . rooms [ user . room ] . started = true ;
114
- lobby . rooms [ user . room ] . server = new GameServer ( room ) ;
115
+ this . rooms [ user . room ] . started = true ;
116
+ this . rooms [ user . room ] . server = new GameServer ( room ) ;
115
117
116
118
server . writeAll ( 's' + user . room ) ;
117
119
break ;
118
-
119
- default : logger . warn ( 'Unknown lobby packet: ' + data ) ;
120
+
121
+ default : log . warn ( 'Unknown lobby packet: %s' , data ) ;
120
122
}
121
123
} ) ;
122
124
123
- server . on ( 'chat' , function ( user , text ) {
125
+ server . on ( 'chat' , ( user , text ) => {
124
126
var message = '<b>' + user . name + '</b>: ' + text ;
125
127
126
128
if ( text [ 0 ] != '/' ) {
127
129
if ( user . admin ) {
128
130
message = '<font color="#ff0000">' + message + '</font>' ;
129
131
}
130
132
131
- lobby . history . push ( 'c' + message ) ;
132
- lobby . history = lobby . history . slice ( - 40 ) ;
133
+ this . history . push ( 'c' + message ) ;
134
+ this . history = this . history . slice ( - 40 ) ;
133
135
134
136
server . writeAll ( 'c' + message ) ;
135
137
} else {
@@ -150,46 +152,46 @@ function LobbyServer() {
150
152
}
151
153
} ) ;
152
154
153
- server . on ( 'disconnect' , function ( user ) {
154
- logger . info ( user . name + ' disconnected') ;
155
+ server . on ( 'disconnect' , user => {
156
+ log . info ( ' %s disconnected', user . name ) ;
155
157
user . writeOthers ( 'l' + user . room + '`' + user . fullname ) ;
156
158
157
- lobby . userIds . splice ( lobby . userIds . indexOf ( user . id ) , 1 ) ;
159
+ this . userIds . splice ( this . userIds . indexOf ( user . id ) , 1 ) ;
158
160
} ) ;
159
161
160
- server . start ( lobby . port , function ( ) {
161
- logger . info ( 'Lobby server running on port ' + lobby . port ) ;
162
+ server . start ( this . port , ( ) => {
163
+ log . info ( 'Lobby server running on port %d' , this . port ) ;
162
164
} ) ;
163
- }
164
-
165
- LobbyServer . prototype . isValidRoom = function ( id ) {
166
- var numberId = parseInt ( id , 10 ) ;
167
- if ( isNaN ( numberId ) ) {
168
- return id == "none" ;
169
165
}
170
- return numberId >= 1 && numberId <= 12 && this . rooms [ id ] . users . length < 4 ;
171
- }
172
- LobbyServer . prototype . getUniqueId = function ( ) {
173
- while ( true ) {
174
- var id = Math . round ( Math . random ( ) * 9999 ) ;
175
- if ( this . userIds . indexOf ( id ) > - 1 ) continue ;
176
- this . userIds . push ( id ) ;
177
- return id ;
166
+ isValidRoom ( id ) {
167
+ var numberId = parseInt ( id , 10 ) ;
168
+ if ( isNaN ( numberId ) ) {
169
+ return id == "none" ;
170
+ }
171
+ return numberId >= 1 && numberId <= 12 && this . rooms [ id ] . users . length < 4 ;
172
+ }
173
+ getUniqueId ( ) {
174
+ while ( true ) {
175
+ var id = Math . round ( Math . random ( ) * 9999 ) ;
176
+ if ( this . userIds . indexOf ( id ) > - 1 ) continue ;
177
+ this . userIds . push ( id ) ;
178
+ return id ;
179
+ }
178
180
}
179
181
}
180
182
181
-
182
- function Room ( ) {
183
- this . users = [ ] ;
184
- this . started = false ;
185
- this . server = null ;
186
- }
187
-
188
- Room . prototype . removeUser = function ( user ) {
189
- var index = this . users . indexOf ( user ) ;
190
- if ( index > - 1 ) {
191
- this . users . splice ( this . users . indexOf ( user ) , 1 ) ;
183
+ class Room {
184
+ constructor ( ) {
185
+ this . users = [ ] ;
186
+ this . started = false ;
187
+ this . server = null ;
188
+ }
189
+ removeUser ( user ) {
190
+ var index = this . users . indexOf ( user ) ;
191
+ if ( index > - 1 ) {
192
+ this . users . splice ( this . users . indexOf ( user ) , 1 ) ;
193
+ }
192
194
}
193
195
}
194
196
195
- module . exports = LobbyServer ;
197
+ module . exports = LobbyServer ;
0 commit comments