@@ -44,8 +44,7 @@ var config = parse_command_line_arguments(process.argv);
44
44
45
45
process . on ( 'uncaughtException' , function ( err ) {
46
46
var context = null ;
47
- if ( ( err . code == 'EACCES' ) &&
48
- ( err . path == config . log ) ) {
47
+ if ( err . code == 'EACCES' && err . path == config . log ) {
49
48
context = util . format (
50
49
'Unable to open logfile ("%s"). Check that permissions are set ' +
51
50
'correctly.' ,
@@ -65,9 +64,8 @@ process.on('uncaughtException', function(err) {
65
64
process . exit ( 1 ) ;
66
65
} ) ;
67
66
68
- var WebSocket ;
69
67
try {
70
- WebSocket = require ( 'ws' ) ;
68
+ require ( 'ws' ) ;
71
69
} catch ( ex ) {
72
70
throw new Error (
73
71
'You need to install the Node.js "ws" module for websocket support. ' +
@@ -88,7 +86,7 @@ if (ssl_config.enabled) {
88
86
89
87
// Add the logfile so we'll fail if we can't write to it.
90
88
if ( config . log ) {
91
- debug . addLogfile ( config . log ) ;
89
+ debug . addLog ( config . log ) ;
92
90
}
93
91
94
92
// If we're just doing a configuration test, exit here before starting any
@@ -98,166 +96,30 @@ if (config.test) {
98
96
process . exit ( 0 ) ;
99
97
}
100
98
101
- var start_time = new Date ( ) . getTime ( ) ;
102
- var messages_out = 0 ;
103
- var messages_in = 0 ;
99
+ JX . require ( 'lib/AphlictAdminServer' , __dirname ) ;
100
+ JX . require ( 'lib/AphlictClientServer' , __dirname ) ;
104
101
105
- var clients = new JX . AphlictListenerList ( ) ;
106
-
107
- function https_discard_handler ( req , res ) {
108
- res . writeHead ( 501 ) ;
109
- res . end ( 'HTTP/501 Use Websockets\n' ) ;
110
- }
111
-
112
- var ws ;
102
+ var server ;
113
103
if ( ssl_config . enabled ) {
114
- var https_server = https . createServer ( {
104
+ server = https . createServer ( {
115
105
key : ssl_config . key ,
116
106
cert : ssl_config . cert
117
- } , https_discard_handler ) . listen (
118
- config [ 'client-port' ] ,
119
- config [ 'client-host' ] ) ;
120
-
121
- ws = new WebSocket . Server ( { server : https_server } ) ;
122
- } else {
123
- ws = new WebSocket . Server ( {
124
- port : config [ 'client-port' ] ,
125
- host : config [ 'client-host' ] ,
126
- } ) ;
127
- }
128
-
129
- ws . on ( 'connection' , function ( ws ) {
130
- var listener = clients . addListener ( ws ) ;
131
-
132
- function log ( ) {
133
- debug . log (
134
- util . format ( '<%s>' , listener . getDescription ( ) ) +
135
- ' ' +
136
- util . format . apply ( null , arguments ) ) ;
137
- }
138
-
139
- log ( 'Connected from %s.' , ws . _socket . remoteAddress ) ;
140
-
141
- ws . on ( 'message' , function ( data ) {
142
- log ( 'Received message: %s' , data ) ;
143
-
144
- var message ;
145
- try {
146
- message = JSON . parse ( data ) ;
147
- } catch ( err ) {
148
- log ( 'Message is invalid: %s' , err . message ) ;
149
- return ;
150
- }
151
-
152
- switch ( message . command ) {
153
- case 'subscribe' :
154
- log (
155
- 'Subscribed to: %s' ,
156
- JSON . stringify ( message . data ) ) ;
157
- listener . subscribe ( message . data ) ;
158
- break ;
159
-
160
- case 'unsubscribe' :
161
- log (
162
- 'Unsubscribed from: %s' ,
163
- JSON . stringify ( message . data ) ) ;
164
- listener . unsubscribe ( message . data ) ;
165
- break ;
166
-
167
- default :
168
- log ( 'Unrecognized command "%s".' , message . command || '<undefined>' ) ;
169
- }
107
+ } , function ( req , res ) {
108
+ res . writeHead ( 501 ) ;
109
+ res . end ( 'HTTP/501 Use Websockets\n' ) ;
170
110
} ) ;
171
-
172
- ws . on ( 'close' , function ( ) {
173
- clients . removeListener ( listener ) ;
174
- log ( 'Disconnected.' ) ;
175
- } ) ;
176
-
177
- ws . on ( 'error' , function ( err ) {
178
- log ( 'Error: %s' , err . message ) ;
179
- } ) ;
180
- } ) ;
181
-
182
- function transmit ( msg ) {
183
- var listeners = clients . getListeners ( ) . filter ( function ( client ) {
184
- return client . isSubscribedToAny ( msg . subscribers ) ;
185
- } ) ;
186
-
187
- for ( var i = 0 ; i < listeners . length ; i ++ ) {
188
- var listener = listeners [ i ] ;
189
-
190
- try {
191
- listener . writeMessage ( msg ) ;
192
-
193
- ++ messages_out ;
194
- debug . log ( '<%s> Wrote Message' , listener . getDescription ( ) ) ;
195
- } catch ( error ) {
196
- clients . removeListener ( listener ) ;
197
- debug . log ( '<%s> Write Error: %s' , listener . getDescription ( ) , error ) ;
198
- }
199
- }
111
+ } else {
112
+ server = http . createServer ( function ( ) { } ) ;
200
113
}
201
114
202
- http . createServer ( function ( request , response ) {
203
- // Publishing a notification.
204
- if ( request . url == '/' ) {
205
- if ( request . method == 'POST' ) {
206
- var body = '' ;
207
-
208
- request . on ( 'data' , function ( data ) {
209
- body += data ;
210
- } ) ;
115
+ var client_server = new JX . AphlictClientServer ( server ) ;
116
+ var admin_server = new JX . AphlictAdminServer ( ) ;
211
117
212
- request . on ( 'end' , function ( ) {
213
- try {
214
- var msg = JSON . parse ( body ) ;
118
+ client_server . setLogger ( debug ) ;
119
+ admin_server . setLogger ( debug ) ;
120
+ admin_server . setClientServer ( client_server ) ;
215
121
216
- debug . log ( 'Received notification: ' + JSON . stringify ( msg ) ) ;
217
- ++ messages_in ;
218
-
219
- try {
220
- transmit ( msg ) ;
221
- response . writeHead ( 200 , { 'Content-Type' : 'text/plain' } ) ;
222
- } catch ( err ) {
223
- debug . log (
224
- '<%s> Internal Server Error! %s' ,
225
- request . socket . remoteAddress ,
226
- err ) ;
227
- response . writeHead ( 500 , 'Internal Server Error' ) ;
228
- }
229
- } catch ( err ) {
230
- debug . log (
231
- '<%s> Bad Request! %s' ,
232
- request . socket . remoteAddress ,
233
- err ) ;
234
- response . writeHead ( 400 , 'Bad Request' ) ;
235
- } finally {
236
- response . end ( ) ;
237
- }
238
- } ) ;
239
- } else {
240
- response . writeHead ( 405 , 'Method Not Allowed' ) ;
241
- response . end ( ) ;
242
- }
243
- } else if ( request . url == '/status/' ) {
244
- var status = {
245
- 'uptime' : ( new Date ( ) . getTime ( ) - start_time ) ,
246
- 'clients.active' : clients . getActiveListenerCount ( ) ,
247
- 'clients.total' : clients . getTotalListenerCount ( ) ,
248
- 'messages.in' : messages_in ,
249
- 'messages.out' : messages_out ,
250
- 'log' : config . log ,
251
- 'version' : 6
252
- } ;
253
-
254
- response . writeHead ( 200 , { 'Content-Type' : 'application/json' } ) ;
255
- response . write ( JSON . stringify ( status ) ) ;
256
- response . end ( ) ;
257
- } else {
258
- response . writeHead ( 404 , 'Not Found' ) ;
259
- response . end ( ) ;
260
- }
261
- } ) . listen ( config [ 'admin-port' ] , config [ 'admin-host' ] ) ;
122
+ client_server . listen ( config [ 'client-port' ] , config [ 'client-host' ] ) ;
123
+ admin_server . listen ( config [ 'admin-port' ] , config [ 'admin-host' ] ) ;
262
124
263
125
debug . log ( 'Started Server (PID %d)' , process . pid ) ;
0 commit comments