2020-09-03 14:04:29 +02:00
|
|
|
const ws = require('ws');
|
|
|
|
|
const URL = require('url');
|
|
|
|
|
const db = require('./db');
|
2021-05-24 13:38:19 +02:00
|
|
|
const channels = require('../lib/db/channels');
|
2020-09-03 14:04:29 +02:00
|
|
|
|
|
|
|
|
function start (server, pingInterval=30000) {
|
2022-04-29 14:48:21 +02:00
|
|
|
|
2020-09-03 14:04:29 +02:00
|
|
|
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) => {
|
2020-09-27 19:19:47 +02:00
|
|
|
// console.log("Received upgrade request", request.url);
|
2020-09-03 14:04:29 +02:00
|
|
|
const url = URL.parse(request.url);
|
|
|
|
|
if (/^\/ws\/?$/.test(url.pathname)) {
|
|
|
|
|
wsServer.handleUpgrade(request, socket, head, socket => {
|
|
|
|
|
wsServer.emit('connection', socket, request);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2020-10-02 00:39:53 +02:00
|
|
|
db.listen(channels, (data) => {
|
2020-09-03 14:04:29 +02:00
|
|
|
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
|
|
|
|
|
}
|