@robotlegsjs/core
Version:
An architecture-based IoC framework for JavaScript/TypeScript
94 lines • 3.82 kB
JavaScript
;
// ------------------------------------------------------------------------------
// Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved.
//
// NOTICE: You are permitted to use, modify, and distribute this file
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------
Object.defineProperty(exports, "__esModule", { value: true });
exports.MessageDispatcher = void 0;
var MessageRunner_1 = require("./MessageRunner");
var safelyCallBack_1 = require("./safelyCallBack");
/**
* Message Dispatcher implementation.
*/
var MessageDispatcher = /** @class */ (function () {
function MessageDispatcher() {
/*============================================================================*/
/* Private Properties */
/*============================================================================*/
this._handlers = new Map();
}
/*============================================================================*/
/* Public Functions */
/*============================================================================*/
/**
* Registers a message handler with a MessageDispatcher.
*
* @param message The interesting message
* @param handler The handler function
*/
MessageDispatcher.prototype.addMessageHandler = function (message, handler) {
var messageHandlers = this._handlers.get(message);
if (messageHandlers) {
if (messageHandlers.indexOf(handler) === -1) {
messageHandlers.push(handler);
}
}
else {
this._handlers.set(message, [handler]);
}
};
/**
* Checks whether the MessageDispatcher has any handlers registered for a specific message.
*
* @param message The interesting message
* @return A value of true if a handler of the specified message is registered; false otherwise.
*/
MessageDispatcher.prototype.hasMessageHandler = function (message) {
return this._handlers.has(message);
};
/**
* Removes a message handler from a MessageDispatcher
*
* @param message The interesting message
* @param handler The handler function
*/
MessageDispatcher.prototype.removeMessageHandler = function (message, handler) {
var messageHandlers = this._handlers.get(message);
var index = messageHandlers ? messageHandlers.indexOf(handler) : -1;
if (index !== -1) {
messageHandlers.splice(index, 1);
if (messageHandlers.length === 0) {
this._handlers.delete(message);
}
}
};
/**
* Dispatches a message into the message flow.
*
* @param message The interesting message
* @param callback The completion callback function
* @param reverse Should handlers be called in reverse order
*/
MessageDispatcher.prototype.dispatchMessage = function (message, callback, reverse) {
if (callback === void 0) { callback = null; }
if (reverse === void 0) { reverse = false; }
var handlers = this._handlers.get(message);
if (handlers) {
handlers = handlers.concat();
if (!reverse) {
handlers.reverse();
}
new MessageRunner_1.MessageRunner(message, handlers, callback).run();
}
else {
if (callback) {
safelyCallBack_1.safelyCallBack(callback);
}
}
};
return MessageDispatcher;
}());
exports.MessageDispatcher = MessageDispatcher;
//# sourceMappingURL=MessageDispatcher.js.map