UNPKG

reliable-zeromq

Version:

A collection of reliable zeromq messaging constructs

64 lines 4.94 kB
"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