UNPKG

mira-app-core

Version:

Core library for Mira TypeScript project - provides base functionality without auto-execution

142 lines 3.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventManager = exports.EventSubscription = exports.EventArgs = void 0; /** * 事件参数基类 */ class EventArgs { /** * 创建一个事件参数实例 * @param eventName 事件名称,默认为空字符串 */ constructor(eventName = '', args = {}) { this.eventName = eventName; this.args = args; this.whenOccurred = new Date(); } } exports.EventArgs = EventArgs; /** * 事件订阅句柄,用于标识和管理订阅 */ class EventSubscription { constructor(eventName, handler, priority = 0) { this._isActive = true; this._id = `sub_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; this._eventName = eventName; this._handler = handler; this._priority = priority; } get id() { return this._id; } get isActive() { return this._isActive; } get eventName() { return this._eventName; } getHandler() { return this._handler; } get priority() { return this._priority; } /** 取消订阅 */ cancel() { this._isActive = false; } } exports.EventSubscription = EventSubscription; const events_1 = require("events"); /** * 事件管理器单例类 * 继承自Node.js EventEmitter以获得更好的性能和标准API */ class EventManager extends events_1.EventEmitter { /** 获取EventManager单例实例 */ static get instance() { if (!EventManager._instance) { EventManager._instance = new EventManager(); } return EventManager._instance; } constructor() { super(); this.setMaxListeners(100); // 提高默认监听器限制 this._initializeEventHandlers(); } /** * 注册一个事件处理器 * @param eventName 事件名称 * @param handler 事件处理函数 * @returns 订阅句柄 */ subscribe(eventName, handler, priority = 0) { const wrappedHandler = (args) => { return handler(args); }; wrappedHandler['priority'] = priority; this.on(eventName, wrappedHandler); return this; } /** * 注册一个一次性事件处理器 * @param eventName 事件名称 * @param handler 事件处理函数 * @returns 订阅句柄 */ subscribeOnce(eventName, handler) { this.once(eventName, handler); return this; } /** * 取消订阅 * @param eventName 事件名称 * @param handler 要取消的事件处理函数 * @returns 是否成功取消订阅 */ unsubscribe(eventName, handler) { this.off(eventName, handler); } /** * 广播事件 * @param eventName 事件名称 * @param args 事件参数 */ async broadcast(eventName, args) { if (!args.eventName) { args.eventName = eventName; } const listeners = this.listeners(eventName); if (listeners.length === 0) { return true; } // 按优先级排序 const sortedListeners = listeners .map(handler => ({ handler, priority: handler['priority'] || 0 })) .sort((a, b) => b.priority - a.priority); for (const { handler } of sortedListeners) { const result = await handler(args); if (result === false) { return false; } } return true; } /** * 清理所有订阅 */ dispose() { this.removeAllListeners(); } /** 初始化事件处理器 */ _initializeEventHandlers() { // 初始化基本事件处理 } } exports.EventManager = EventManager; //# sourceMappingURL=event-manager.js.map