From 36404cb0d5d770be842c62e524d9f93c2d1e2d47 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Fri, 24 Nov 2023 13:19:56 -0600 Subject: [PATCH] add websocket flag to cli --- packages/cli/index.js | 32 ++++++++++++++++++++++++++++++++ packages/cli/package.json | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/cli/index.js b/packages/cli/index.js index 929ee01..ec3511b 100755 --- a/packages/cli/index.js +++ b/packages/cli/index.js @@ -4,6 +4,7 @@ const { SerialPort } = require('serialport'); const { Console, Packets } = require('aas-lib'); const { writeFileSync } = require('fs'); const { program, Option } = require('commander'); +const { WebSocketServer } = require('ws'); const packageInfo = require('./package.json'); @@ -13,6 +14,7 @@ program.description('Simple protocol router /s'); program.option('-d, --device ', 'serialport path'); program.option('-o, --output ', 'file to write console info to'); program.addOption(new Option('-f, --format ').choices(['json']).default('json')); +program.option('--websocket ', 'enable websocket server for updates', undefined); program.parse(process.argv); const options = program.opts(); @@ -21,12 +23,25 @@ if (!options.device) { process.exit(1); } +let ws; +if (options.websocket) { + ws = new WebSocketServer({ port: options.websocket }); +} + const aasConsole = new Console(); const port = new SerialPort({ path: options.device, baudRate: 76800, }); +function sendToWSClients(payload) { + if (ws && ws.clients) { + ws.clients.forEach((socket) => { + socket.send(JSON.stringify(payload)); + }); + } +} + port.on('error', (error) => { console.error('app: problem with serial port'); console.error(error.message); @@ -38,6 +53,12 @@ port.on('data', (data) => { try { aasConsole.update(data); console.log('app: console data updated'); + if (ws) { + sendToWSClients({ + eventName: 'update', + data: aasConsole.toJSON(), + }); + } } catch (error) { console.error('app: error updating console state'); } @@ -59,12 +80,23 @@ const initializeInterval = setInterval(function initialize() { } else if (port) { console.log('app: requesting console data to start streaming'); port.write(Packets.START_LIVE); + if (ws) { + sendToWSClients({ eventName: 'initializing' }); + } } }, 1000); process.on('SIGINT', () => { console.log('app: shutting down'); clearInterval(initializeInterval); + if (ws) { + if (ws.clients) { + ws.clients.forEach((socket) => { + socket.close(); + }); + } + ws.close(); + } port.write(Packets.STOP_LIVE); port.close(); }); diff --git a/packages/cli/package.json b/packages/cli/package.json index d2fdef5..2c8b219 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -15,7 +15,8 @@ "dependencies": { "aas-lib": "^0.1.0", "commander": "^11.1.0", - "serialport": "^12.0.0" + "serialport": "^12.0.0", + "ws": "^8.14.2" }, "devDependencies": { "pkg": "^5.8.1",