IOTConnect-Web/node_modules/mqtt/build/lib/topic-alias-send.js
2024-05-09 09:49:52 +08:00

53 lines
1.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const lru_cache_1 = require("lru-cache");
const number_allocator_1 = require("number-allocator");
class TopicAliasSend {
constructor(max) {
if (max > 0) {
this.aliasToTopic = new lru_cache_1.LRUCache({ max });
this.topicToAlias = {};
this.numberAllocator = new number_allocator_1.NumberAllocator(1, max);
this.max = max;
this.length = 0;
}
}
put(topic, alias) {
if (alias === 0 || alias > this.max) {
return false;
}
const entry = this.aliasToTopic.get(alias);
if (entry) {
delete this.topicToAlias[entry];
}
this.aliasToTopic.set(alias, topic);
this.topicToAlias[topic] = alias;
this.numberAllocator.use(alias);
this.length = this.aliasToTopic.size;
return true;
}
getTopicByAlias(alias) {
return this.aliasToTopic.get(alias);
}
getAliasByTopic(topic) {
const alias = this.topicToAlias[topic];
if (typeof alias !== 'undefined') {
this.aliasToTopic.get(alias);
}
return alias;
}
clear() {
this.aliasToTopic.clear();
this.topicToAlias = {};
this.numberAllocator.clear();
this.length = 0;
}
getLruAlias() {
const alias = this.numberAllocator.firstVacant();
if (alias)
return alias;
return [...this.aliasToTopic.keys()][this.aliasToTopic.size - 1];
}
}
exports.default = TopicAliasSend;
//# sourceMappingURL=topic-alias-send.js.map