45 lines
993 B
JavaScript
45 lines
993 B
JavaScript
import { WebSocketServer } from 'ws';
|
|
|
|
let wss;
|
|
let connections = [];
|
|
|
|
export function init(cfg, db) {
|
|
wss = new WebSocketServer(cfg);
|
|
|
|
wss.on('connection', ws => {
|
|
connections.push(ws);
|
|
|
|
ws.on('error', console.error);
|
|
ws.on('close', (e) => {
|
|
connections.splice(connections.indexOf(ws), 1);
|
|
});
|
|
ws.on('message', (data, isBinary) => {
|
|
try {
|
|
let message = JSON.parse(data);
|
|
|
|
switch (message.action) {
|
|
case "set":
|
|
db.persist(
|
|
message.subject,
|
|
message.filter,
|
|
message.field,
|
|
message.value
|
|
);
|
|
break;
|
|
case "subscribe":
|
|
db.subscribe(
|
|
message.subject,
|
|
message.filter
|
|
).then(r => ws.send(r));
|
|
break;
|
|
default:
|
|
throw 'invalid action "' + message.action + '"';
|
|
}
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
});
|
|
return wss;
|
|
}
|