diff options
| author | James Barnett <noreply@jamesbarnett.xyz> | 2018-04-07 18:49:48 +0100 |
|---|---|---|
| committer | James Barnett <noreply@jamesbarnett.xyz> | 2018-04-07 18:49:48 +0100 |
| commit | 24b4a39fce61dd9bd8ab7757f3bbda0636adc8c9 (patch) | |
| tree | b4ce61e16a66c2a43e40b8f78cc8431af7ef2d3a /routes/ws.js | |
| parent | 954aff49707738e660e92e0418c31b1ec78a85a8 (diff) | |
| download | tplink-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.js | 25 |
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; |