1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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');
const dataLogger = require('../services/data-logger.js');
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));
dataLogger.getAllEntries(deviceId, (loggedData) => {
ws.send(dataBroadcaster.generatePayload('loggedData', deviceId, loggedData));
});
}
});
});
module.exports = router;
|