@eagleoutice/flowr-dev
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
78 lines • 2.61 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NetServer = exports.WebSocketWrapper = exports.WebSocketServerWrapper = void 0;
/**
* This is just a simple layer to allow me to mock the server's behavior in tests.
*/
const net_1 = __importDefault(require("net"));
const ws_1 = require("ws");
const server_1 = require("./server");
class WebSocketServerWrapper {
server;
connectHandler;
onConnect(handler) {
this.connectHandler = handler;
}
start(port) {
this.server = new ws_1.WebSocketServer({ port, maxPayload: 1024 * 1024 * 1024 * 1024 });
this.server.on('error', (e) => reportListenFailure(port, e));
server_1.serverLog.info('WebSocket-Server wrapper is active!');
this.server.on('connection', c => this.connectHandler?.(new WebSocketWrapper(c)));
}
}
exports.WebSocketServerWrapper = WebSocketServerWrapper;
class WebSocketWrapper {
socket;
remoteAddress;
remotePort;
constructor(socket) {
this.socket = socket;
this.remoteAddress = socket.url;
}
write(data) {
this.socket.send(data);
}
end() {
this.socket.close();
}
on(event, listener) {
if (event === 'data') {
this.socket.on('message', listener);
}
else {
this.socket.on(event, listener);
}
}
}
exports.WebSocketWrapper = WebSocketWrapper;
class NetServer {
server;
constructor() {
this.server = net_1.default.createServer();
}
onConnect(handler) {
this.server.on('connection', handler);
}
start(port) {
this.server.on('error', (e) => reportListenFailure(port, e));
this.server.listen(port);
}
}
exports.NetServer = NetServer;
/** Log a clear, actionable message for a server that failed to bind its port, then exit (there is nothing left to serve). */
function reportListenFailure(port, e) {
if (e.code === 'EADDRINUSE') {
server_1.serverLog.error(`Port ${port} is already in use. Pick another port with --port <number> or stop the process using it.`);
}
else if (e.code === 'EACCES') {
server_1.serverLog.error(`Not allowed to listen on port ${port} (permission denied). Try a port above 1024 with --port <number>.`);
}
else {
server_1.serverLog.error(`Failed to start the server on port ${port}: ${e.message}`);
}
process.exit(1);
}
//# sourceMappingURL=net.js.map