@thatcompany/ts-tool
Version:
基于TypeScript编写的工具库
97 lines • 3.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ApplicationEventPublisher = void 0;
const logger_1 = require("../../../logger");
const logger = logger_1.LoggerContext.getSubLogger('EventPublisher', true);
class ApplicationEventPublisher {
eventBus;
constructor(eventBus = new Map()) {
this.eventBus = eventBus;
}
/**
* 发布事件
* @param args 事件参数
*/
publishEvent(...args) {
const eventType = args.map((arg) => arg.constructor.name).join('::');
const listeners = this.eventBus.get(eventType);
if (listeners) {
listeners.forEach((item) => {
try {
item.method.apply(item.instance, args);
}
catch (error) {
logger.error(`监听器运行异常: (${item.instance.constructor.name}::${item.method.name})`, error);
}
});
}
else {
logger.warn(`未找到监听器接受该事件参数类型: (${eventType})`);
}
}
/**
* 发布异步事件
* @param args 事件参数
*/
async publishAsyncEvent(...args) {
const eventType = args.map((arg) => arg.constructor.name).join('::');
const listeners = this.eventBus.get(eventType);
if (listeners) {
for (const item of listeners) {
try {
await item.method.apply(item.instance, args);
}
catch (error) {
logger.error(`监听器运行异常: (${item.instance.constructor.name}::${item.method.name})`, error);
}
}
}
else {
logger.warn(`未找到监听器接受该事件参数类型: (${eventType})`);
}
}
/**
* 发布事件 根据事件ID
* @param eventID 事件ID 自动识别参数类型为TEventID类型,比如 'SignSendEmail' as TEventID
* @param args 事件参数 自动识别参数类型为any[]类型
*/
publishEventByID(eventID, ...args) {
const listeners = this.eventBus.get(eventID);
if (listeners) {
listeners.forEach((item) => {
try {
item.method.apply(item.instance, args);
}
catch (error) {
logger.error(`监听器运行异常: (${item.instance.constructor.name}::${item.method.name})`, error);
}
});
}
else {
logger.warn(`未找到监听器ID为: ${eventID},或检查eventID是否设置为TEventID类型,比如 'SignSendEmail' as TEventID`);
}
}
/**
* 发布异步事件 根据事件ID
* @param eventID 事件ID 自动识别参数类型为TEventID类型,比如 'SignSendEmail' as TEventID
* @param args 事件参数 自动识别参数类型为any[]类型
*/
async publishAsyncEventByID(eventID, ...args) {
const listeners = this.eventBus.get(eventID);
if (listeners) {
for (const item of listeners) {
try {
await item.method.apply(item.instance, args);
}
catch (error) {
logger.error(`监听器运行异常: (${item.instance.constructor.name}::${item.method.name})`, error);
}
}
}
else {
logger.warn(`未找到监听器ID为: ${eventID},或检查eventID是否设置为TEventID类型,比如 'SignSendEmail' as TEventID`);
}
}
}
exports.ApplicationEventPublisher = ApplicationEventPublisher;
//# sourceMappingURL=ApplicationEventPublisher.js.map