3
3
//const path = require( "path" );
4
4
5
5
import { sack } from "../../vfs_module.mjs" ;
6
+ import { Events } from "../events/events.mjs" ;
6
7
import { uExpress } from "./uexpress.mjs" ;
7
8
import path from "path" ;
8
9
const disk = sack . Volume ( ) ;
@@ -167,6 +168,51 @@ app.get( /.*\.jsox|.*\.json6/, (req,res)=>{
167
168
} )
168
169
}
169
170
171
+ class Server extends Events {
172
+ handlers = [ ] ;
173
+ resourcePath = "." ;
174
+ npmPath = "." ;
175
+ constructor ( server , serverOpts , reqHandler ) {
176
+ super ( ) ;
177
+ this . reqHandler = reqHandler ;
178
+ this . serverOpts = serverOpts ;
179
+ this . server = server ;
180
+ }
181
+ server = null ;
182
+ //handleEvent( req, res ) {
183
+ // return eventHandler( req, res );
184
+ //}
185
+ setResourcePath ( path ) {
186
+ resourcePath = path ;
187
+ }
188
+ addHandler ( handler ) {
189
+ this . handlers . push ( handler ) ;
190
+ }
191
+ removeHandler ( handler ) {
192
+ const index = this . handlers . findIndex ( h => h === handler ) ;
193
+ if ( index >= 0 )
194
+ handlers . splice ( index , 1 ) ;
195
+ }
196
+
197
+ handleEvent ( req , res ) {
198
+ for ( let handler of this . handlers ) {
199
+ if ( handler ( req , res , this . serverOpts ) ) {
200
+ return true ;
201
+ }
202
+ }
203
+ if ( ! this . reqHandler ( req , res ) ) {
204
+ if ( requests . length !== 0 )
205
+ clearTimeout ( reqTimeout ) ;
206
+ reqTimeout = setTimeout ( logRequests , 100 ) ;
207
+
208
+ requests . push ( "Failed request: " + req . url + " as " + lastFilePath ) ;
209
+ res . writeHead ( 404 , { 'Access-Control-Allow-Origin' : req . connection . headers . Origin } ) ;
210
+ res . end ( "<HTML><HEAD><title>404</title></HEAD><BODY>404<br>" + req . url + "</BODY></HTML>" ) ;
211
+ }
212
+ }
213
+
214
+ }
215
+
170
216
//exports.open = openServer;
171
217
let eventHandler = null ;
172
218
export function openServer ( opts , cbAccept , cbConnect )
@@ -181,30 +227,13 @@ export function openServer( opts, cbAccept, cbConnect )
181
227
serverOpts . key = serverOpts . key || certKey ;
182
228
}
183
229
const server = sack . WebSocket . Server ( serverOpts )
184
-
185
230
//console.log( "serving on " + serverOpts.port, server );
186
231
//console.log( "with:", disk.dir() );
187
232
188
- const reqHandler = getRequestHandler ( opts ) ;
189
- server . onrequest = handleEvent ;
190
- eventHandler = handleEvent ;
233
+ const srvr = new Server ( server , serverOpts , getRequestHandler ( opts ) ) ;
234
+
235
+ server . onrequest = srvr . handleEvent . bind ( srvr ) ;
191
236
192
- function handleEvent ( req , res ) {
193
- for ( let handler of handlers ) {
194
- if ( handler ( req , res , serverOpts ) ) {
195
- return true ;
196
- }
197
- }
198
- if ( ! reqHandler ( req , res ) ) {
199
- if ( requests . length !== 0 )
200
- clearTimeout ( reqTimeout ) ;
201
- reqTimeout = setTimeout ( logRequests , 100 ) ;
202
-
203
- requests . push ( "Failed request: " + req . url + " as " + lastFilePath ) ;
204
- res . writeHead ( 404 , { 'Access-Control-Allow-Origin' : req . connection . headers . Origin } ) ;
205
- res . end ( "<HTML><HEAD><title>404</title></HEAD><BODY>404<br>" + req . url + "</BODY></HTML>" ) ;
206
- }
207
- }
208
237
server . on ( "lowError" , function ( error , address , buffer ) {
209
238
if ( error !== 1 && error != 6 )
210
239
console . log ( "Low Error with:" , error , address , buffer ) ;
@@ -216,6 +245,11 @@ export function openServer( opts, cbAccept, cbConnect )
216
245
server . onaccept = function ( ws ) {
217
246
//console.log( "send accept?", cbAccept );
218
247
if ( cbAccept ) return cbAccept . call ( this , ws ) ;
248
+ if ( srvr . on ( "accept" , ws ) ) {
249
+ this . accept ( ) ;
250
+ return ;
251
+ }
252
+
219
253
if ( process . env . DEFAULT_REJECT_WEBSOCKET == "1" )
220
254
this . reject ( ) ;
221
255
else
@@ -225,33 +259,19 @@ export function openServer( opts, cbAccept, cbConnect )
225
259
server . onconnect = function ( ws ) {
226
260
if ( cbConnect ) return cbConnect . call ( this , ws ) ;
227
261
ws . nodelay = true ;
228
- ws . onmessage = function ( msg ) {
229
- // echo message.
230
- ws . send ( msg ) ;
231
- } ;
232
- ws . onclose = function ( ) {
233
- console . log ( "Remote closed" ) ;
234
- } ;
262
+ if ( ! srvr . on ( "connect" , ws ) ) {
263
+ ws . onmessage = function ( msg ) {
264
+ // echo message.
265
+ // ws.send( msg );
266
+ parser . write ( msg ) ;
267
+ } ;
268
+ ws . onclose = function ( ) {
269
+ console . log ( "Remote closed" ) ;
270
+ } ;
271
+ }
235
272
} ;
236
273
237
- const serverResult = {
238
- server,
239
- handleEvent ( req , res ) {
240
- return eventHandler ( req , res ) ;
241
- } ,
242
- setResourcePath ( path ) {
243
- resourcePath = path ;
244
- } ,
245
- addHandler ( handler ) {
246
- handlers . push ( handler ) ;
247
- } ,
248
- removeHandler ( handler ) {
249
- const index = handlers . findIndex ( h => h === handler ) ;
250
- if ( index >= 0 )
251
- handlers . splice ( index , 1 ) ;
252
- }
253
- }
254
- hookJSOX ( serverOpts , serverResult ) ;
255
- return serverResult ;
274
+ hookJSOX ( serverOpts , srvr ) ;
275
+ return srvr ;
256
276
}
257
277
0 commit comments