UNPKG

@m-ld/m-ld-cli

Version:

m-ld Node.js terminal app for local persistence & data loading

56 lines (50 loc) 1.54 kB
const socket = require('socket.io'); const { IoRemotesService } = require('@m-ld/m-ld/ext/socket.io-server'); const host = require('../lib/host'); const { uuid } = require('@m-ld/m-ld'); /** * @typedef {GlobalOpts} IoConfig * @property {number} [port] */ Object.assign(exports, require('./cmds.json').io); /** * @param {import('yargs/yargs').Argv} yargs * @returns {import('yargs/yargs').Argv<IoConfig>} */ exports.builder = yargs => yargs .positional('port', { describe: 'Port for server', default: 0, type: 'number' }); /** * @param {IoConfig} argv */ exports.handler = argv => { const meta = { '@id': uuid() }; // Create and run an HTTP server for Express and Socket.io const httpServer = require('http').createServer(); httpServer.listen(argv.port, () => { const port = httpServer.address().port; host.report('start', 'started', { ...meta, port, env: { CLI_IO__URI: `http://localhost:${port}` } }); }); // Start the Socket.io server, and attach the m-ld message-passing service const io = new socket.Server(httpServer); new IoRemotesService(io.sockets) // The m-ld service provides some debugging information .on('error', console.error) .on('debug', console.debug); // Listen for stop messages process.on('message', msg => { if (msg['@type'] === 'stop') httpServer.close(err => { if (err) host.reportError(msg.cmdId, err); else host.report(msg.id, 'stopped', meta); process.exit(); }); }); };