From 9a4fd82dcf39f48fc55bd68bd21036c4901777db Mon Sep 17 00:00:00 2001 From: dgflash Date: Sun, 5 Apr 2026 10:52:32 +0800 Subject: [PATCH] =?UTF-8?q?CCBusiness=E6=94=AF=E6=8C=81=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=85=A8=E9=83=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/module/common/CCBusiness.ts | 83 ++++++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 3 deletions(-) diff --git a/assets/module/common/CCBusiness.ts b/assets/module/common/CCBusiness.ts index b864f91..d9afc34 100644 --- a/assets/module/common/CCBusiness.ts +++ b/assets/module/common/CCBusiness.ts @@ -6,7 +6,7 @@ */ import { EventDispatcher } from '../../core/common/event/EventDispatcher'; -import type { ListenerFunc } from '../../core/common/event/EventMessage'; +import type { ListenerFunc, ListenerFuncTyped } from '../../core/common/event/EventMessage'; import type { CCEntity } from './CCEntity'; /** 业务逻辑 */ @@ -38,6 +38,60 @@ export class CCBusiness { return this._event; } + //#region 强类型事件方法 + + /** + * 注册全局事件(强类型) + * @param event 事件名(枚举) + * @param listener 处理事件的侦听器函数 + * @param object 侦听函数绑定的this对象 + */ + watch(event: K, listener: ListenerFuncTyped, object: any): void { + this.event.on(event as string, listener as ListenerFunc, object); + } + + /** + * 监听一次事件,事件响应后,该监听自动移除(强类型) + * @param event 事件名(枚举) + * @param listener 事件触发回调方法 + * @param object 侦听函数绑定的this对象 + */ + watchOnce(event: K, listener: ListenerFuncTyped, object: any): void { + this.event.once(event as string, listener as ListenerFunc, object); + } + + /** + * 移除全局事件(强类型) + * @param event 事件名(枚举) + * @param listener 处理事件的侦听器函数(可选) + * @param object 侦听函数绑定的this对象(可选) + */ + unwatch(event: K, listener?: ListenerFuncTyped, object?: any): void { + this.event.off(event as string, listener as ListenerFunc, object); + } + + /** + * 触发强类型全局事件 + * @param event 事件名(枚举) + * @param data 事件数据 + */ + emit(event: K, data: OopsFramework.TypedEventMap[K]): void { + this.event.emit(event, data); + } + + /** + * 触发强类型异步全局事件(严格类型检查) + * @param event 事件名(枚举) + * @param data 事件数据(必须完全匹配类型定义) + */ + emitAsync(event: K, data: OopsFramework.TypedEventMap[K]): Promise { + return this.event.emitAsync(event, data); + } + + //#endregion + + //#region 弱类型事件方法 + /** * 注册全局事件 * @param event 事件名 @@ -48,12 +102,24 @@ export class CCBusiness { this.event.on(event, listener, object); } + /** + * 监听一次事件,事件响应后,该监听自动移除 + * @param event 事件名 + * @param listener 事件触发回调方法 + * @param object 侦听函数绑定的this对象 + */ + once(event: string, listener: ListenerFunc, object: object) { + this.event.once(event, listener, object); + } + /** * 移除全局事件 * @param event 事件名 + * @param listener 处理事件的侦听器函数(可选) + * @param object 侦听函数绑定的this对象(可选) */ - off(event: string) { - this.event.off(event); + off(event: string, listener?: ListenerFunc, object?: object) { + this.event.off(event, listener, object); } /** @@ -65,6 +131,15 @@ export class CCBusiness { this.event.dispatchEvent(event, ...args); } + /** + * 触发全局事件,支持同步与异步处理 + * @param event 事件名 + * @param args 事件参数 + */ + dispatchEventAsync(event: string, ...args: unknown[]): Promise { + return this.event.dispatchEventAsync(event, ...args); + } + /** * 批量设置全局事件 * @example @@ -86,4 +161,6 @@ export class CCBusiness { } //#endregion + + //#endregion }