UNPKG

landstrasse

Version:

Strongly typed WAMP Client for browsers

96 lines 3.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const deferred_1 = require("./deferred"); const MessageTypes_1 = require("../types/messages/MessageTypes"); class PendingMap { constructor(initMsg, successMsg, emptyRequest) { Object.defineProperty(this, "initMsg", { enumerable: true, configurable: true, writable: true, value: initMsg }); Object.defineProperty(this, "successMsg", { enumerable: true, configurable: true, writable: true, value: successMsg }); Object.defineProperty(this, "emptyRequest", { enumerable: true, configurable: true, writable: true, value: emptyRequest }); Object.defineProperty(this, "_pendings", { enumerable: true, configurable: true, writable: true, value: new Map() }); Object.defineProperty(this, "_closed", { enumerable: true, configurable: true, writable: true, value: false }); } add(id) { const deferred = new deferred_1.default(); this._pendings.set(id, deferred); return deferred.promise; } reject(pendingId, err) { const deferred = this._pendings.get(pendingId); if (!deferred) { return; } this._pendings.delete(pendingId); deferred.reject(err); } close() { this._closed = true; this._pendings.forEach((pending) => { pending.reject('closing'); }); this._pendings.clear(); } // // - Handlers. // handle(msg) { if (this._closed) { return [false, true, '']; } if (msg[0] === this.successMsg) { const requestId = msg[1]; if (requestId === 0 && !!this.emptyRequest) { const [success, error] = this.emptyRequest(msg); return [true, success, error]; } const pendingRequest = this.getAndDelete(requestId); if (!pendingRequest) { return [true, false, `Unexpected ${MessageTypes_1.EWampMessageID[this.successMsg]}.`]; } pendingRequest.resolve(msg); return [true, true, '']; } if (msg[0] === MessageTypes_1.EWampMessageID.ERROR && msg[1] === this.initMsg) { const requestId = msg[2]; const pendingRequest = this.getAndDelete(requestId); if (!pendingRequest) { return [true, false, `Unexpected ${MessageTypes_1.EWampMessageID[this.initMsg]} error.`]; } pendingRequest.reject(new Error(msg[4])); return [true, true, '']; } return [false, true, '']; } getAndDelete(id) { const val = this._pendings.get(id); this._pendings.delete(id); return val || null; } } exports.default = PendingMap; //# sourceMappingURL=map.js.map