UNPKG

@jsonjoy.com/json-pack

Version:

High-performance JSON serialization library

92 lines 3.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Nfsv4TcpServer = void 0; const tslib_1 = require("tslib"); const net = tslib_1.__importStar(require("net")); const Nfsv4Connection_1 = require("./Nfsv4Connection"); /* tslint:disable:no-console */ const PORT = Number(process.env.NFS_PORT) || Number(process.env.PORT) || 2049; const HOST = process.env.NFS_HOST ? String(process.env.NFS_HOST) : process.env.HOST ? String(process.env.HOST) : '127.0.0.1'; class Nfsv4TcpServer { static start(opts) { const server = new Nfsv4TcpServer(opts); server.start().catch(console.error); } constructor(opts) { this.port = PORT; this.host = HOST; this.debug = false; this.port = opts.port ?? PORT; this.host = opts.host ?? HOST; this.debug = opts.debug ?? false; this.logger = opts.logger ?? console; const ops = opts.ops; const server = (this.server = new net.Server()); server.on('connection', (socket) => { if (this.debug) this.logger.log('New connection from', socket.remoteAddress, 'port', socket.remotePort); new Nfsv4Connection_1.Nfsv4Connection({ duplex: socket, ops, debug: this.debug, logger: this.logger, }); }); server.on('error', opts.onError ?? ((err) => { if (this.debug) this.logger.error('Server error:', err.message); process.exit(1); })); if (opts.stopOnSigint ?? true) { this.sigintHandler = () => { if (this.debug) this.logger.log('\nShutting down NFSv4 server...'); this.cleanup(); process.exit(0); }; process.on('SIGINT', this.sigintHandler); } } cleanup() { if (this.sigintHandler) { process.off('SIGINT', this.sigintHandler); this.sigintHandler = undefined; } this.server.close((err) => { if (this.debug && err) this.logger.error('Error closing server:', err); }); } stop() { return new Promise((resolve) => { this.cleanup(); this.server.close(() => { if (this.debug) this.logger.log('NFSv4 server closed'); resolve(); }); }); } start(port = this.port, host = this.host) { if (this.debug) this.logger.log(`Starting NFSv4 TCP server on ${host}:${port}...`); return new Promise((resolve, reject) => { const onError = (err) => reject(err); const server = this.server; server.on('error', onError); server.listen(port, host, () => { if (this.debug) this.logger.log(`NFSv4 TCP server listening on ${host}:${port}`); server.off('error', onError); resolve(); }); }); } } exports.Nfsv4TcpServer = Nfsv4TcpServer; //# sourceMappingURL=Nfsv4TcpServer.js.map