reliable-zeromq
Version:
A collection of reliable zeromq messaging constructs
64 lines • 4.94 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const NonceMap_1 = require("../Utils/NonceMap");
class TopicEntry {
constructor(aEndpoint, aTopic, aRecoveryHandler) {
this.mCallbacks = new Map();
this.mNonce = -1;
this.mNonceMap = new NonceMap_1.NonceMap();
this.mEndpoint = aEndpoint;
this.mRecoveryHandler = aRecoveryHandler;
this.mTopic = aTopic;
}
get Callbacks() {
return this.mCallbacks;
}
get Nonce() {
return this.mNonce;
}
ProcessHeartbeatMessage(aHeartbeatNonce) {
const lLastSeenNonce = this.mNonce;
if (aHeartbeatNonce > lLastSeenNonce) {
const lFirstMissingId = lLastSeenNonce + 1;
const lLastMissingId = aHeartbeatNonce;
const lMissingNonces = [];
for (let i = lFirstMissingId; i <= lLastMissingId; ++i) {
lMissingNonces.push(i);
}
this.mRecoveryHandler(this.mEndpoint, this.mTopic, lMissingNonces);
this.mNonce = aHeartbeatNonce;
}
}
ProcessPublishMessage(aReceivedNonce, aMessage) {
/*
TODO: Performance optimizations & refactoring:
- Allow batched nonce import, this will be useful for recovery requests
- Try and simplify the checking of newly inserted nonces, away from the dual mNonce and mNonceMap system
- Note that we don't want to call ZMQRequest.Send() multiple times because Send() already has retries in-
built.
*/
const lLastSeenNonce = this.mNonce;
const lExpectedNonce = lLastSeenNonce + 1;
if (aReceivedNonce >= lExpectedNonce) {
this.mNonce = aReceivedNonce;
}
if (!this.mNonceMap.Has(aReceivedNonce)) {
this.mCallbacks.forEach((aSubscriber) => {
aSubscriber(aMessage);
});
this.mNonceMap.Insert(aReceivedNonce);
this.mNonceMap.GarbageClean();
}
if (aReceivedNonce > lExpectedNonce) {
const lStart = lExpectedNonce;
const lEnd = aReceivedNonce - 1;
const lMissingNonces = [];
for (let i = lStart; i <= lEnd; ++i) {
lMissingNonces.push(i);
}
this.mRecoveryHandler(this.mEndpoint, this.mTopic, lMissingNonces);
}
}
}
exports.default = TopicEntry;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9waWNFbnRyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL1NyYy9aTVFTdWJzY3JpYmVyL1RvcGljRW50cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxnREFBNkM7QUFLN0MsTUFBcUIsVUFBVTtJQVMzQixZQUFtQixTQUFpQyxFQUFFLE1BQWMsRUFBRSxnQkFBa0M7UUFQdkYsZUFBVSxHQUF1QyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBSXBFLFdBQU0sR0FBVyxDQUFDLENBQUMsQ0FBQztRQUNwQixjQUFTLEdBQWEsSUFBSSxtQkFBUSxFQUFFLENBQUM7UUFJekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFFaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFFWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVNLHVCQUF1QixDQUFDLGVBQXVCO1FBRWxELE1BQU0sY0FBYyxHQUFXLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFM0MsSUFBSSxlQUFlLEdBQUcsY0FBYyxFQUNwQztZQUNJLE1BQU0sZUFBZSxHQUFXLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDbkQsTUFBTSxjQUFjLEdBQVcsZUFBZSxDQUFDO1lBRS9DLE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztZQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFXLGVBQWUsRUFBRSxDQUFDLElBQUksY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUM5RDtnQkFDSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFCO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxjQUFzQixFQUFFLFFBQWdCO1FBRWpFOzs7Ozs7VUFNRTtRQUNGLE1BQU0sY0FBYyxHQUFXLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0MsTUFBTSxjQUFjLEdBQVcsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUVsRCxJQUFJLGNBQWMsSUFBSSxjQUFjLEVBQ3BDO1lBQ0ksSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7U0FDaEM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQ3ZDO1lBQ0ksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFrQyxFQUFFLEVBQUU7Z0JBRTNELFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDakM7UUFFRCxJQUFJLGNBQWMsR0FBRyxjQUFjLEVBQ25DO1lBQ0ksTUFBTSxNQUFNLEdBQVcsY0FBYyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxHQUFXLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFFeEMsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1lBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQVcsTUFBTSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQzNDO2dCQUNJLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDMUI7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQ3RFO0lBQ0wsQ0FBQztDQUNKO0FBeEZELDZCQXdGQyJ9