nats
Version:
Node.js client for NATS, a lightweight, high-performance cloud native messaging system
77 lines • 1.91 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Subscriptions = void 0;
class Subscriptions {
constructor() {
this.sidCounter = 0;
this.mux = null;
this.subs = new Map();
}
size() {
return this.subs.size;
}
add(s) {
this.sidCounter++;
s.sid = this.sidCounter;
this.subs.set(s.sid, s);
return s;
}
setMux(s) {
this.mux = s;
return s;
}
getMux() {
return this.mux;
}
get(sid) {
return this.subs.get(sid);
}
resub(s) {
this.sidCounter++;
this.subs.delete(s.sid);
s.sid = this.sidCounter;
this.subs.set(s.sid, s);
return s;
}
all() {
return Array.from(this.subs.values());
}
cancel(s) {
if (s) {
s.close();
this.subs.delete(s.sid);
}
}
handleError(err) {
if (err && err.permissionContext) {
const ctx = err.permissionContext;
const subs = this.all();
let sub;
if (ctx.operation === "subscription") {
sub = subs.find((s) => {
return s.subject === ctx.subject;
});
}
if (ctx.operation === "publish") {
// we have a no mux subscription
sub = subs.find((s) => {
return s.requestSubject === ctx.subject;
});
}
if (sub) {
sub.callback(err, {});
sub.close();
this.subs.delete(sub.sid);
return sub !== this.mux;
}
}
return false;
}
close() {
this.subs.forEach((sub) => {
sub.close();
});
}
}
exports.Subscriptions = Subscriptions;
//# sourceMappingURL=subscriptions.js.map