aboutsummaryrefslogtreecommitdiff
path: root/routes/ws.js
diff options
context:
space:
mode:
authorJames Barnett <noreply@jamesbarnett.xyz>2018-04-07 18:49:48 +0100
committerJames Barnett <noreply@jamesbarnett.xyz>2018-04-07 18:49:48 +0100
commit24b4a39fce61dd9bd8ab7757f3bbda0636adc8c9 (patch)
treeb4ce61e16a66c2a43e40b8f78cc8431af7ef2d3a /routes/ws.js
parent954aff49707738e660e92e0418c31b1ec78a85a8 (diff)
downloadtplink-energy-monitor-24b4a39fce61dd9bd8ab7757f3bbda0636adc8c9.tar.xz
tplink-energy-monitor-24b4a39fce61dd9bd8ab7757f3bbda0636adc8c9.zip
Switch from http polling to data push via websockets
Diffstat (limited to 'routes/ws.js')
-rw-r--r--routes/ws.js25
1 files changed, 25 insertions, 0 deletions
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;