mirror of
https://github.com/JasonYANG170/IOTConnect-Web.git
synced 2024-11-23 20:26:28 +00:00
53 lines
1.6 KiB
JavaScript
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
|