aboutsummaryrefslogtreecommitdiff
path: root/routes/ws.js
diff options
context:
space:
mode:
authorJames Barnett <james.barnett@fivium.co.uk>2018-04-08 17:25:47 +0100
committerGitHub <noreply@github.com>2018-04-08 17:25:47 +0100
commiteb0185c03f8d5b68949798e8040b42a203b040a2 (patch)
tree86da8449b0c92ec29a15baffe3e7bd8ebd34488e /routes/ws.js
parent954aff49707738e660e92e0418c31b1ec78a85a8 (diff)
parent4ec37af74fc77f7381d7c5c3b2560c8726f75ffa (diff)
downloadtplink-energy-monitor-0.2.tar.xz
tplink-energy-monitor-0.2.zip
Merge pull request #1 from jamesbarnett91/websocketsv0.2
Switch from http polling to websockets
Diffstat (limited to 'routes/ws.js')
-rw-r--r--routes/ws.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/routes/ws.js b/routes/ws.js
new file mode 100644
index 0000000..08b0a18
--- /dev/null
+++ b/routes/ws.js
@@ -0,0 +1,28 @@
+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 => {
+
+ let message = JSON.parse(msg);
+
+ // Latest data is always pushed out to clients, but clients can also request cached data at any time.
+ if(message.requestType === 'getCachedData') {
+ let deviceId = message.deviceId;
+ let cachedData = dataFetcher.getCachedData(deviceId);
+
+ 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));
+ }
+ });
+
+});
+
+module.exports = router;