theatre-events
Version:
A full implementation of a standard event dispatcher for javascript
59 lines • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var event_listener_1 = require("./../event-listener");
/**
* A synchronous implementation of an event broadcaster
*/
var SynchronousEventBroadcaster = (function () {
function SynchronousEventBroadcaster() {
this.subscribers = new Map();
}
/**
* {@inheritdoc}
*/
SynchronousEventBroadcaster.prototype.broadcast = function (payload) {
var _this = this;
var priorities = [];
this.subscribers.forEach(function (s, priority) { return priorities.push(priority); });
priorities.sort().map(function (priority) {
_this.subscribers.get(priority).map(function (s) { return s(payload); });
});
return payload;
};
/**
* {@inheritdoc}
*/
SynchronousEventBroadcaster.prototype.subscribe = function (subscriber) {
subscriber.priority = subscriber.priority || event_listener_1.NORMAL_PRIORITY;
if (!this.subscribers.get(subscriber.priority)) {
this.subscribers.set(subscriber.priority, []);
}
this.subscribers.get(subscriber.priority).push(subscriber);
};
/**
* {@inheritdoc}
*/
SynchronousEventBroadcaster.prototype.remove = function (subscriber) {
var _this = this;
this.subscribers.forEach(function (subscribers, priority) {
subscribers.map(function (s, i) {
if (s !== subscriber) {
return;
}
subscribers.splice(i, 1);
});
if (!subscribers.length) {
_this.subscribers.delete(priority);
}
});
};
/**
* {@inheritdoc}
*/
SynchronousEventBroadcaster.prototype.clear = function () {
this.subscribers = new Map();
};
return SynchronousEventBroadcaster;
}());
exports.default = SynchronousEventBroadcaster;
//# sourceMappingURL=synchronous-event-broadcaster.js.map