CHANGE: multiple entites
This commit is contained in:
@@ -17,7 +17,8 @@ export class MQTTEntity implements iMQTTEntityBase {
|
||||
|
||||
set name(name: string) {
|
||||
this._name = name;
|
||||
this._uniq_id = btoa(this._name).slice(-7).slice(0, 5);
|
||||
if (name == '') return;
|
||||
this._uniq_id = hash(name);
|
||||
this.topic_updates.next('stat_t');
|
||||
}
|
||||
|
||||
@@ -98,3 +99,46 @@ export interface iMQTTEntityBase {
|
||||
|
||||
toJSON: () => string;
|
||||
}
|
||||
|
||||
function hash(str: string): string {
|
||||
let seed = cyrb128(str);
|
||||
let rand = sfc32(seed[0], seed[1], seed[2], seed[3]);
|
||||
let rand_num = Math.floor(rand() * 100000).toString();
|
||||
return rand_num;
|
||||
}
|
||||
|
||||
function cyrb128(str: string) {
|
||||
let h1 = 1779033703,
|
||||
h2 = 3144134277,
|
||||
h3 = 1013904242,
|
||||
h4 = 2773480762;
|
||||
for (let i = 0, k; i < str.length; i++) {
|
||||
k = str.charCodeAt(i);
|
||||
h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
|
||||
h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
|
||||
h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
|
||||
h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
|
||||
}
|
||||
h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);
|
||||
h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);
|
||||
h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);
|
||||
h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);
|
||||
(h1 ^= h2 ^ h3 ^ h4), (h2 ^= h1), (h3 ^= h1), (h4 ^= h1);
|
||||
return [h1 >>> 0, h2 >>> 0, h3 >>> 0, h4 >>> 0];
|
||||
}
|
||||
|
||||
function sfc32(a: number, b: number, c: number, d: number) {
|
||||
return function () {
|
||||
a |= 0;
|
||||
b |= 0;
|
||||
c |= 0;
|
||||
d |= 0;
|
||||
let t = (((a + b) | 0) + d) | 0;
|
||||
d = (d + 1) | 0;
|
||||
a = b ^ (b >>> 9);
|
||||
b = (c + (c << 3)) | 0;
|
||||
c = (c << 21) | (c >>> 11);
|
||||
c = (c + t) | 0;
|
||||
return (t >>> 0) / 4294967296;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user