Files
dougal-software/lib/www/server/ws/index.js
D. Berge e3a3bdb153 Clean up whitespace.
Commands used:

find . -type f -name '*.js'| while read FILE; do if echo $FILE |grep -qv node_modules; then sed -ri 's/^\s+$//' "$FILE"; fi; done
find . -type f -name '*.vue'| while read FILE; do if echo $FILE |grep -qv node_modules; then sed -ri 's/^\s+$//' "$FILE"; fi; done
find . -type f -name '*.py'| while read FILE; do if echo $FILE |grep -qv node_modules; then sed -ri 's/^\s+$//' "$FILE"; fi; done
2022-04-29 14:48:21 +02:00

49 lines
1.1 KiB
JavaScript

const ws = require('ws');
const URL = require('url');
const db = require('./db');
const channels = require('../lib/db/channels');
function start (server, pingInterval=30000) {
const wsServer = new ws.Server({ noServer: true });
wsServer.on('connection', socket => {
socket.alive = true;
socket.on('pong', function () { this.alive = true; })
socket.on('message', message => console.log(message));
});
server.on('upgrade', (request, socket, head) => {
// console.log("Received upgrade request", request.url);
const url = URL.parse(request.url);
if (/^\/ws\/?$/.test(url.pathname)) {
wsServer.handleUpgrade(request, socket, head, socket => {
wsServer.emit('connection', socket, request);
});
}
});
db.listen(channels, (data) => {
wsServer.clients.forEach( (socket) => {
socket.send(JSON.stringify(data));
})
});
const interval = setInterval( () => {
wsServer.clients.forEach( (socket) => {
if (!socket.alive) {
return socket.terminate();
}
socket.alive = false;
socket.ping();
})
}, pingInterval);
wsServer.on('close', () => clearInterval(interval));
return wsServer;
}
module.exports = {
start
}