Files
pezkuwi-telemetry/packages/backend/src/index.ts
T
2018-07-24 23:08:06 +02:00

40 lines
1.2 KiB
TypeScript

import * as WebSocket from 'ws';
import Node from './Node';
import Feed from './Feed';
import Aggregator from './Aggregator';
const WS_PORT_TELEMETRY_SERVER = 1024;
const WS_PORT_FEED_SERVER = 8080;
const aggregator = new Aggregator();
// WebSocket for Nodes feeding telemetry data to the server
const incomingTelemetry = new WebSocket.Server({ port: WS_PORT_TELEMETRY_SERVER });
// WebSocket for web clients listening to the telemetry data aggregate
const telemetryFeed = new WebSocket.Server({ port: WS_PORT_FEED_SERVER });
console.log(`Telemetry server listening on port ${WS_PORT_TELEMETRY_SERVER}`);
console.log(`Feed server listening on port ${WS_PORT_FEED_SERVER}`);
const ipv4 = /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/;
incomingTelemetry.on('connection', async (socket, req) => {
try {
const [ ip ] = (req.headers['x-forwarded-for'] || req.connection.remoteAddress || '0.0.0.0')
.toString()
.match(ipv4) || ['0.0.0.0'];
const node = await Node.fromSocket(socket, ip);
aggregator.addNode(node);
} catch (err) {
console.error(err);
}
});
telemetryFeed.on('connection', (socket: WebSocket) => {
aggregator.addFeed(new Feed(socket));
});