core-cde
Version:
46 lines • 1.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventDispatcher = void 0;
/**
* Диспетчер, который может передавать события подписчикам.
*/
class EventDispatcher {
/**
* Конструктор
*/
constructor() {
this._handlers = [];
}
/**
* Ригистрирует новый обработчик у диспетчера. Каждый раз,
* когда событие отправляется, обработчик получает уведомление.
* @param handler Обработчик для регистрации.
*/
register(caller, handler) {
this._handlers.push({ caller, handler });
}
/**
* Отписать обработчик от диспетчера.
* @param handler Обработчик для удаления.
*/
unregister(caller, handler) {
for (let i = 0; i < this._handlers.length; i++) {
if (this._handlers[i].caller === caller) {
if (this._handlers[i].handler === handler) {
this._handlers.splice(i, 1);
}
}
}
}
/**
* Рассылает событие всем подписчикам.
* @param event Данные о произошедшем событии.
*/
dispatch(event) {
for (const item of this._handlers) {
item.caller[item.handler.name](event);
}
}
}
exports.EventDispatcher = EventDispatcher;
//# sourceMappingURL=Event.js.map