UNPKG

@eagleoutice/flowr-dev

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

78 lines 2.61 kB
"use strict"; 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