stream filtering by connection id

This commit is contained in:
Jan Prochazka
2024-05-20 14:02:47 +02:00
parent df3313e647
commit 51d4bc9a75
5 changed files with 39 additions and 13 deletions

View File

@@ -1,7 +1,7 @@
const _ = require('lodash');
const stableStringify = require('json-stable-stringify');
const sseResponses = [];
const sseResponses = {};
let electronSender = null;
let pingConfigured = false;
@@ -12,12 +12,15 @@ module.exports = {
pingConfigured = true;
}
},
addSseResponse(value) {
sseResponses.push(value);
addSseResponse(value, strmid) {
sseResponses[strmid] = {
response: value,
filter: {},
};
this.ensurePing();
},
removeSseResponse(value) {
_.remove(sseResponses, x => x == value);
removeSseResponse(strmid) {
delete sseResponses[strmid];
},
setElectronSender(value) {
electronSender = value;
@@ -27,8 +30,23 @@ module.exports = {
if (electronSender) {
electronSender.send(message, data == null ? null : data);
}
for (const res of sseResponses) {
res.write(`event: ${message}\ndata: ${stableStringify(data == null ? null : data)}\n\n`);
for (const strmid in sseResponses) {
let skipThisStream = false;
for (const key in sseResponses[strmid].filter) {
if (data && data[key]) {
if (!sseResponses[strmid].filter[key].includes(data[key])) {
skipThisStream = true;
break;
}
}
}
if (skipThisStream) {
continue;
}
sseResponses[strmid].response.write(
`event: ${message}\ndata: ${stableStringify(data == null ? null : data)}\n\n`
);
}
},
emitChanged(key, params = undefined) {
@@ -36,4 +54,7 @@ module.exports = {
this.emit('changed-cache', { key, ...params });
// this.emit(key);
},
setStreamIdFilter(strmid, filter) {
sseResponses[strmid].filter = filter;
},
};