Skip to content

Commit b1393e4

Browse files
author
d3x0r
committed
Previously returned an anonymous object as server, make a formal object type for it instead
1 parent 4b4e2fe commit b1393e4

File tree

1 file changed

+66
-46
lines changed

1 file changed

+66
-46
lines changed

apps/http-ws/server.mjs

+66-46
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//const path = require( "path" );
44

55
import {sack} from "../../vfs_module.mjs";
6+
import {Events} from "../events/events.mjs";
67
import {uExpress} from "./uexpress.mjs";
78
import path from "path";
89
const disk = sack.Volume();
@@ -167,6 +168,51 @@ app.get( /.*\.jsox|.*\.json6/, (req,res)=>{
167168
} )
168169
}
169170

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+
170216
//exports.open = openServer;
171217
let eventHandler = null;
172218
export function openServer( opts, cbAccept, cbConnect )
@@ -181,30 +227,13 @@ export function openServer( opts, cbAccept, cbConnect )
181227
serverOpts.key = serverOpts.key || certKey;
182228
}
183229
const server = sack.WebSocket.Server( serverOpts )
184-
185230
//console.log( "serving on " + serverOpts.port, server );
186231
//console.log( "with:", disk.dir() );
187232

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 );
191236

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-
}
208237
server.on( "lowError",function (error, address, buffer) {
209238
if( error !== 1 && error != 6 )
210239
console.log( "Low Error with:", error, address, buffer );
@@ -216,6 +245,11 @@ export function openServer( opts, cbAccept, cbConnect )
216245
server.onaccept = function ( ws ) {
217246
//console.log( "send accept?", cbAccept );
218247
if( cbAccept ) return cbAccept.call(this,ws);
248+
if( srvr.on( "accept", ws ) ) {
249+
this.accept();
250+
return;
251+
}
252+
219253
if( process.env.DEFAULT_REJECT_WEBSOCKET == "1" )
220254
this.reject();
221255
else
@@ -225,33 +259,19 @@ export function openServer( opts, cbAccept, cbConnect )
225259
server.onconnect = function (ws) {
226260
if( cbConnect ) return cbConnect.call(this,ws);
227261
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+
}
235272
};
236273

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;
256276
}
257277

0 commit comments

Comments
 (0)