From 24b4a39fce61dd9bd8ab7757f3bbda0636adc8c9 Mon Sep 17 00:00:00 2001 From: James Barnett Date: Sat, 7 Apr 2018 18:49:48 +0100 Subject: Switch from http polling to data push via websockets --- routes/ws.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 routes/ws.js (limited to 'routes/ws.js') diff --git a/routes/ws.js b/routes/ws.js new file mode 100644 index 0000000..dc22df2 --- /dev/null +++ b/routes/ws.js @@ -0,0 +1,25 @@ +const express = require('express'); +const router = express.Router(); + +const deviceManager = require('../services/device-manager'); +const dataFetcher = require('../services/data-fetcher'); +const dataBroadcaster = require('../services/data-broadcaster'); + +router.ws('/', function(ws, req) { + + ws.on('message', msg => { + + // Latest data is always pushed out to clients, but clients can also request cached data at any time. + if(msg === 'getCachedData') { + let cachedData = dataFetcher.getCachedData(); + + ws.send(dataBroadcaster.generatePayload('realtimeUsage', cachedData.realtimeUsage)); + ws.send(dataBroadcaster.generatePayload('dailyUsage', cachedData.dailyUsage)); + ws.send(dataBroadcaster.generatePayload('monthlyUsage', cachedData.monthlyUsage)); + ws.send(dataBroadcaster.generatePayload('powerState', cachedData.powerState)); + } + }); + +}); + +module.exports = router; -- cgit v1.2.3 From 1301d90e93af799a9054f133847ebf3cbda15f9d Mon Sep 17 00:00:00 2001 From: James Barnett Date: Sat, 7 Apr 2018 21:43:17 +0100 Subject: Add support for switching between multiple plugs --- routes/ws.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'routes/ws.js') diff --git a/routes/ws.js b/routes/ws.js index dc22df2..08b0a18 100644 --- a/routes/ws.js +++ b/routes/ws.js @@ -9,14 +9,17 @@ router.ws('/', function(ws, req) { ws.on('message', msg => { + let message = JSON.parse(msg); + // Latest data is always pushed out to clients, but clients can also request cached data at any time. - if(msg === 'getCachedData') { - let cachedData = dataFetcher.getCachedData(); + if(message.requestType === 'getCachedData') { + let deviceId = message.deviceId; + let cachedData = dataFetcher.getCachedData(deviceId); - ws.send(dataBroadcaster.generatePayload('realtimeUsage', cachedData.realtimeUsage)); - ws.send(dataBroadcaster.generatePayload('dailyUsage', cachedData.dailyUsage)); - ws.send(dataBroadcaster.generatePayload('monthlyUsage', cachedData.monthlyUsage)); - ws.send(dataBroadcaster.generatePayload('powerState', cachedData.powerState)); + ws.send(dataBroadcaster.generatePayload('realtimeUsage', deviceId, cachedData.realtimeUsage)); + ws.send(dataBroadcaster.generatePayload('dailyUsage', deviceId, cachedData.dailyUsage)); + ws.send(dataBroadcaster.generatePayload('monthlyUsage', deviceId, cachedData.monthlyUsage)); + ws.send(dataBroadcaster.generatePayload('powerState', deviceId, cachedData.powerState)); } }); -- cgit v1.2.3