You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cvm/lib/websockets/deduplicator.js

44 lines
1.1 KiB
JavaScript

'use strict';
const events = require("events");
module.exports = function createDeduplicator(options) {
let mergedOptions = Object.assign({
historyLength: 10
}, options);
let seenMessages = {}; // FIXME: Use a Set instead?
function tryMessage(client, data, callback) {
if (client.socketId == null) {
// FIXME: Warning!
console.error("Not deduplicating message because client.socketId is null");
callback();
} else if (data.messageId == null) {
// FIXME: Warning!
console.error("Not deduplicating message because data.messageId is null");
callback();
} else {
if (seenMessages[client.socketId] == null) {
seenMessages[client.socketId] = [];
}
let clientSeenMessages = seenMessages[client.socketId];
if (clientSeenMessages.indexOf(data.messageId) !== 1) {
clientSeenMessages.push(data);
if (clientSeenMessages.length > mergedOptions.historyLength) {
clientSeenMessages.shift();
}
callback();
}
}
}
tryMessage.forgetClient = function forgetClient(client) {
delete seenMessages[client.socketId];
}
}