@synerty/vortexjs
Version:
Custom observable data serialisation and routing based on Angular 2+
69 lines • 10.8 kB
JavaScript
import { PayloadDelegateABC } from "./PayloadDelegateABC";
import { PayloadDelegateInMainWeb } from "./PayloadDelegateInMainWeb";
import PromiseWorker from "webworker-promise";
class WorkerRotator {
count;
nextIndex = 0;
workers = [];
constructor(createWorker, count) {
this.count = count;
while (this.workers.length < count) {
this.workers.push(new PromiseWorker(createWorker()));
}
}
get nextWorker() {
// Rotate to next worker
this.nextIndex += 1;
if (this.nextIndex === this.count) {
this.nextIndex = 0;
}
return this.workers[this.nextIndex];
}
}
export class PayloadDelegateWeb extends PayloadDelegateABC {
// Payload
encodePayloadWorker;
decodePayloadWorker;
// PayloadEnvelope
encodePayloadEnvelopeWorker;
decodePayloadEnvelopeWorker;
ENCODE_WORKER_COUNT = 1;
DECODE_WORKER_COUNT = 3;
inMainDelegate = new PayloadDelegateInMainWeb();
constructor(encodePayloadWorkerCreator, decodePayloadWorkerCreator, encodePayloadEnvelopeWorkerCreator, decodePayloadEnvelopeWorkerCreator) {
super();
// ---------------∂
// Payload
this.encodePayloadWorker = new WorkerRotator(encodePayloadWorkerCreator, this.ENCODE_WORKER_COUNT);
this.decodePayloadWorker = new WorkerRotator(decodePayloadWorkerCreator, this.DECODE_WORKER_COUNT);
// ---------------
// PayloadEnvelope Envelope
this.encodePayloadEnvelopeWorker = new WorkerRotator(() => encodePayloadEnvelopeWorkerCreator, this.ENCODE_WORKER_COUNT);
this.decodePayloadEnvelopeWorker = new WorkerRotator(() => decodePayloadEnvelopeWorkerCreator, this.DECODE_WORKER_COUNT);
}
deflateAndEncode(payloadJson) {
// Don't send small messages to the worker
if (payloadJson.length < 10 * 1024)
return this.inMainDelegate.deflateAndEncode(payloadJson);
return this.encodePayloadWorker.nextWorker.postMessage(payloadJson);
}
encodeEnvelope(payloadJson) {
// Don't send small messages to the worker
if (payloadJson.length < 5 * 1024)
return this.inMainDelegate.encodeEnvelope(payloadJson);
return this.encodePayloadEnvelopeWorker.nextWorker.postMessage(payloadJson);
}
decodeAndInflate(encodedPayload) {
// Don't send small messages to the worker
if (encodedPayload.length < 5 * 1024)
return this.inMainDelegate.decodeAndInflate(encodedPayload);
return this.decodePayloadWorker.nextWorker.postMessage(encodedPayload);
}
decodeEnvelope(vortexStr) {
// Don't send small messages to the worker
if (vortexStr.length < 5 * 1024)
return this.inMainDelegate.decodeEnvelope(vortexStr);
return this.decodePayloadEnvelopeWorker.nextWorker.postMessage(vortexStr);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF5bG9hZERlbGVnYXRlV2ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3ZvcnRleC9wYXlsb2FkL1BheWxvYWREZWxlZ2F0ZVdlYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVwRSxPQUFPLGFBQWEsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxNQUFNLGFBQWE7SUFJNEI7SUFIbkMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBb0IsRUFBRSxDQUFDO0lBRXRDLFlBQVksWUFBWSxFQUFtQixLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNwRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRTtZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDeEQ7SUFDTCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1Ysd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsa0JBQWtCO0lBQ3RELFVBQVU7SUFDRixtQkFBbUIsQ0FBZ0I7SUFDbkMsbUJBQW1CLENBQWdCO0lBRTNDLGtCQUFrQjtJQUNWLDJCQUEyQixDQUFnQjtJQUMzQywyQkFBMkIsQ0FBZ0I7SUFFMUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLG1CQUFtQixHQUFHLENBQUMsQ0FBQztJQUV6QixjQUFjLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO0lBRXhELFlBQVksMEJBQW9DLEVBQUUsMEJBQW9DLEVBQUUsa0NBQTRDLEVBQUUsa0NBQTRDO1FBQzlLLEtBQUssRUFBRSxDQUFDO1FBQ1IsbUJBQW1CO1FBQ25CLFVBQVU7UUFDVixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxhQUFhLENBQ3hDLDBCQUEwQixFQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQzNCLENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxhQUFhLENBQ3hDLDBCQUEwQixFQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQzNCLENBQUM7UUFFRixrQkFBa0I7UUFDbEIsMkJBQTJCO1FBQzNCLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLGFBQWEsQ0FDaEQsR0FBRyxFQUFFLENBQ0Qsa0NBQWtDLEVBQ3RDLElBQUksQ0FBQyxtQkFBbUIsQ0FDM0IsQ0FBQztRQUVGLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLGFBQWEsQ0FDaEQsR0FBRyxFQUFFLENBQ0Qsa0NBQWtDLEVBQ3RDLElBQUksQ0FBQyxtQkFBbUIsQ0FDM0IsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUNoQywwQ0FBMEM7UUFDMUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJO1lBQzlCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU3RCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxjQUFjLENBQUMsV0FBbUI7UUFDOUIsMENBQTBDO1FBQzFDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSTtZQUM3QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNELE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQzFELFdBQVcsQ0FDZCxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUFDLGNBQXNCO1FBQ25DLDBDQUEwQztRQUMxQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUk7WUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWhFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFpQjtRQUM1QiwwQ0FBMEM7UUFDMUMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJO1lBQzNCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFekQsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FDMUQsU0FBUyxDQUNaLENBQUM7SUFDTixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BheWxvYWREZWxlZ2F0ZUFCQ30gZnJvbSBcIi4vUGF5bG9hZERlbGVnYXRlQUJDXCI7XG5pbXBvcnQge1BheWxvYWREZWxlZ2F0ZUluTWFpbldlYn0gZnJvbSBcIi4vUGF5bG9hZERlbGVnYXRlSW5NYWluV2ViXCI7XG5cbmltcG9ydCBQcm9taXNlV29ya2VyIGZyb20gXCJ3ZWJ3b3JrZXItcHJvbWlzZVwiO1xuXG5jbGFzcyBXb3JrZXJSb3RhdG9yIHtcbiAgICBwcml2YXRlIG5leHRJbmRleCA9IDA7XG4gICAgcHJpdmF0ZSB3b3JrZXJzOiBQcm9taXNlV29ya2VyW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKGNyZWF0ZVdvcmtlciwgcHJpdmF0ZSByZWFkb25seSBjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLndvcmtlcnMubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgICAgICAgIHRoaXMud29ya2Vycy5wdXNoKG5ldyBQcm9taXNlV29ya2VyKGNyZWF0ZVdvcmtlcigpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbmV4dFdvcmtlcigpOiBQcm9taXNlV29ya2VyIHtcbiAgICAgICAgLy8gUm90YXRlIHRvIG5leHQgd29ya2VyXG4gICAgICAgIHRoaXMubmV4dEluZGV4ICs9IDE7XG4gICAgICAgIGlmICh0aGlzLm5leHRJbmRleCA9PT0gdGhpcy5jb3VudCkge1xuICAgICAgICAgICAgdGhpcy5uZXh0SW5kZXggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2Vyc1t0aGlzLm5leHRJbmRleF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGF5bG9hZERlbGVnYXRlV2ViIGV4dGVuZHMgUGF5bG9hZERlbGVnYXRlQUJDIHtcbiAgICAvLyBQYXlsb2FkXG4gICAgcHJpdmF0ZSBlbmNvZGVQYXlsb2FkV29ya2VyOiBXb3JrZXJSb3RhdG9yO1xuICAgIHByaXZhdGUgZGVjb2RlUGF5bG9hZFdvcmtlcjogV29ya2VyUm90YXRvcjtcblxuICAgIC8vIFBheWxvYWRFbnZlbG9wZVxuICAgIHByaXZhdGUgZW5jb2RlUGF5bG9hZEVudmVsb3BlV29ya2VyOiBXb3JrZXJSb3RhdG9yO1xuICAgIHByaXZhdGUgZGVjb2RlUGF5bG9hZEVudmVsb3BlV29ya2VyOiBXb3JrZXJSb3RhdG9yO1xuXG4gICAgcmVhZG9ubHkgRU5DT0RFX1dPUktFUl9DT1VOVCA9IDE7XG4gICAgcmVhZG9ubHkgREVDT0RFX1dPUktFUl9DT1VOVCA9IDM7XG5cbiAgICBwcml2YXRlIGluTWFpbkRlbGVnYXRlID0gbmV3IFBheWxvYWREZWxlZ2F0ZUluTWFpbldlYigpO1xuXG4gICAgY29uc3RydWN0b3IoZW5jb2RlUGF5bG9hZFdvcmtlckNyZWF0b3I6IEZ1bmN0aW9uLCBkZWNvZGVQYXlsb2FkV29ya2VyQ3JlYXRvcjogRnVuY3Rpb24sIGVuY29kZVBheWxvYWRFbnZlbG9wZVdvcmtlckNyZWF0b3I6IEZ1bmN0aW9uLCBkZWNvZGVQYXlsb2FkRW52ZWxvcGVXb3JrZXJDcmVhdG9yOiBGdW5jdGlvbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS3iiIJcbiAgICAgICAgLy8gUGF5bG9hZFxuICAgICAgICB0aGlzLmVuY29kZVBheWxvYWRXb3JrZXIgPSBuZXcgV29ya2VyUm90YXRvcihcbiAgICAgICAgICAgIGVuY29kZVBheWxvYWRXb3JrZXJDcmVhdG9yLFxuICAgICAgICAgICAgdGhpcy5FTkNPREVfV09SS0VSX0NPVU5UXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5kZWNvZGVQYXlsb2FkV29ya2VyID0gbmV3IFdvcmtlclJvdGF0b3IoXG4gICAgICAgICAgICBkZWNvZGVQYXlsb2FkV29ya2VyQ3JlYXRvcixcbiAgICAgICAgICAgIHRoaXMuREVDT0RFX1dPUktFUl9DT1VOVFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBQYXlsb2FkRW52ZWxvcGUgRW52ZWxvcGVcbiAgICAgICAgdGhpcy5lbmNvZGVQYXlsb2FkRW52ZWxvcGVXb3JrZXIgPSBuZXcgV29ya2VyUm90YXRvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgZW5jb2RlUGF5bG9hZEVudmVsb3BlV29ya2VyQ3JlYXRvcixcbiAgICAgICAgICAgIHRoaXMuRU5DT0RFX1dPUktFUl9DT1VOVFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZGVjb2RlUGF5bG9hZEVudmVsb3BlV29ya2VyID0gbmV3IFdvcmtlclJvdGF0b3IoXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgIGRlY29kZVBheWxvYWRFbnZlbG9wZVdvcmtlckNyZWF0b3IsXG4gICAgICAgICAgICB0aGlzLkRFQ09ERV9XT1JLRVJfQ09VTlRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkZWZsYXRlQW5kRW5jb2RlKHBheWxvYWRKc29uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICAvLyBEb24ndCBzZW5kIHNtYWxsIG1lc3NhZ2VzIHRvIHRoZSB3b3JrZXJcbiAgICAgICAgaWYgKHBheWxvYWRKc29uLmxlbmd0aCA8IDEwICogMTAyNClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluTWFpbkRlbGVnYXRlLmRlZmxhdGVBbmRFbmNvZGUocGF5bG9hZEpzb24pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVuY29kZVBheWxvYWRXb3JrZXIubmV4dFdvcmtlci5wb3N0TWVzc2FnZShwYXlsb2FkSnNvbik7XG4gICAgfVxuXG4gICAgZW5jb2RlRW52ZWxvcGUocGF5bG9hZEpzb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIC8vIERvbid0IHNlbmQgc21hbGwgbWVzc2FnZXMgdG8gdGhlIHdvcmtlclxuICAgICAgICBpZiAocGF5bG9hZEpzb24ubGVuZ3RoIDwgNSAqIDEwMjQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbk1haW5EZWxlZ2F0ZS5lbmNvZGVFbnZlbG9wZShwYXlsb2FkSnNvbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlUGF5bG9hZEVudmVsb3BlV29ya2VyLm5leHRXb3JrZXIucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICBwYXlsb2FkSnNvblxuICAgICAgICApO1xuICAgIH1cblxuICAgIGRlY29kZUFuZEluZmxhdGUoZW5jb2RlZFBheWxvYWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIC8vIERvbid0IHNlbmQgc21hbGwgbWVzc2FnZXMgdG8gdGhlIHdvcmtlclxuICAgICAgICBpZiAoZW5jb2RlZFBheWxvYWQubGVuZ3RoIDwgNSAqIDEwMjQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbk1haW5EZWxlZ2F0ZS5kZWNvZGVBbmRJbmZsYXRlKGVuY29kZWRQYXlsb2FkKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVQYXlsb2FkV29ya2VyLm5leHRXb3JrZXIucG9zdE1lc3NhZ2UoZW5jb2RlZFBheWxvYWQpO1xuICAgIH1cblxuICAgIGRlY29kZUVudmVsb3BlKHZvcnRleFN0cjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgLy8gRG9uJ3Qgc2VuZCBzbWFsbCBtZXNzYWdlcyB0byB0aGUgd29ya2VyXG4gICAgICAgIGlmICh2b3J0ZXhTdHIubGVuZ3RoIDwgNSAqIDEwMjQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbk1haW5EZWxlZ2F0ZS5kZWNvZGVFbnZlbG9wZSh2b3J0ZXhTdHIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlY29kZVBheWxvYWRFbnZlbG9wZVdvcmtlci5uZXh0V29ya2VyLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgdm9ydGV4U3RyXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19