react-native-canvas
Version:
A Canvas component for React Native
78 lines (77 loc) • 2.07 kB
JavaScript
;
/**
* @typedef {Object} Message
* @property {string} id
*/
Object.defineProperty(exports, "__esModule", { value: true });
var Bus = /** @class */ (function () {
/**
* @param {function} send
*/
function Bus(send) {
this._paused = false;
/**
* @type {Object.<string, function>}
*/
this._messageListeners = {};
/**
* @type {Message[]}
*/
this._queue = [];
this._send = send;
}
/**
* @param {Message} message
* @return {Promise.<Message>}
*/
Bus.prototype.post = function (message) {
var _this = this;
return new Promise(function (resolve) {
/**
* Currently, 'set' is the only message type that's not resolved
* back to the caller. If we store it here, it will leak memory
* because the entry won't get removed from this._messageListeners.
*/
if (message.type !== "set") {
_this._messageListeners[message.id] = resolve;
}
if (!_this._paused) {
_this._send(message);
}
else {
_this._queue.push(message);
}
});
};
/**
* @param {Message} message
* @return {void}
*/
Bus.prototype.handle = function (message) {
var handler = this._messageListeners[message.id];
// Delete the message listener from the cache as soon as it's handled.
delete this._messageListeners[message.id];
if (handler) {
handler(message);
}
else {
console.warn("Received unexpected message", message);
}
};
/**
* @returns {void}
*/
Bus.prototype.pause = function () {
this._paused = true;
};
/**
* @returns {void}
*/
Bus.prototype.resume = function () {
this._paused = false;
this._send(this._queue);
this._queue = [];
};
return Bus;
}());
exports.default = Bus;