import { FlexEventListener, FlexEvent, FlexEventOptions, FlexEventSubscriber } from './flexEvent.js'; import '../string/replaceAll.js'; interface FlexEventLikeError { code?: number; message?: string; } declare enum FlexEventBusNodeEvents { Join = "$node/join",// 节点加入到总线时 Disjoin = "$node/disjoin" } declare function buildFlexEventBusMessage(payload: any, meta?: FlexEventBusMessageMeta): FlexEventBusMessage; interface FlexEventBusMessageMeta { timestamp?: number; [key: string]: any; } /** * 为总线中的消息指定类型 */ interface FlexEventBusMessage { from?: string; id?: number; meta?: FlexEventBusMessageMeta; error?: FlexEventLikeError | Error; payload?: any; } interface FlexEventBusNodeOptions { id?: string; receiveBroadcast?: boolean; onMessage?: FlexEventListener; } declare class FlexEventBusNode { #private; constructor(options?: FlexEventBusNodeOptions); get id(): string; private _onMessage; /** * 接收到发送给该节点的消息时触发 * 供子类继承 * @param message */ onMessage(message: FlexEventBusMessage): void; /** * 连接到总线 * @param eventbus */ join(eventbus: FlexEventBus): void; /** * 从总线中断开 */ disjoin(): void; /** * 以当前节点身份向总线触发事件 * * 如node(name='device') * * let node = new FlexEventbusNode({id:"device"}) * node.emit("a") // == FlexEventbus.emit("device/a") * @param message */ emit(event: string, payload: any, meta?: FlexEventBusMessageMeta, retain?: boolean): void; emitAsync(event: string, payload: any, meta?: FlexEventBusMessageMeta, retain?: boolean): Promise; /** * 向指定节点发送消息 * @param nodeId 目标节点id * @param message */ send(nodeId: string, payload: any, meta?: FlexEventBusMessageMeta): any[] | undefined; sendAsync(nodeId: string, payload: any, meta?: FlexEventBusMessageMeta): Promise | undefined; /** * 处理要订阅的事件名称 * 如果有以分隔符开头,代表要订阅全局事件,其他情况下会自动加上当前节点id作为前缀 * 代表只订阅本节点的事件 * @param event * @param listener * @returns */ private handleOnEvent; /** * 只订阅一次事件 * @param event * @param listener * @returns */ once(event: string, listener?: FlexEventListener): string | FlexEventSubscriber | undefined; /** * 订阅事件 * * 如果有以分隔符开头,代表要订阅全局事件 * * @param event 事件名称,如果不包含分隔符,会自动加上当前节点id作为前缀 * @param listener * @returns */ on(event: string, listener?: FlexEventListener): string | FlexEventSubscriber | undefined; /** * 等待某个事件发生 * @param event * @param timeout * @returns */ waitFor(event: string, timeout?: number): Promise; /** * 取消订阅某个事件 * @param event 事件名称,如果不包含分隔符,会自动加上当前节点id作为前缀 * @param listener * @returns */ off(listener: FlexEventListener): void; off(listenerId: string): void; off(event: string, listener: FlexEventListener): void; /** * 广播消息,所有节点都会收到该消息 * @param message * @param useAsync */ broadcast(message: FlexEventBusMessage, useAsync?: boolean): any[] | Promise | undefined; } type FlexEventBusOptions = FlexEventOptions; /** * * 一个简单的事件总线,每一个节点均具有唯一的ID * */ declare class FlexEventBus extends FlexEvent { #private; constructor(options?: FlexEventBusOptions); private onNodeJoin; private onNodeDisjoin; /** * 创建这个eventbus上的节点(直接join) */ createNode(options?: FlexEventBusNodeOptions): FlexEventBusNode; /** * 广播消息,所有节点都会收到该消息 * * @param message * @param useAsync * @returns */ broadcast(payload: any, meta?: FlexEventBusMessageMeta): any[]; /** * 向指定的节点发送消息 * @param nodeId * @param message */ send(nodeId: string, payload: any, meta?: FlexEventBusMessageMeta): void; } export { FlexEventBus, type FlexEventBusMessage, type FlexEventBusMessageMeta, FlexEventBusNode, FlexEventBusNodeEvents, type FlexEventBusNodeOptions, type FlexEventBusOptions, type FlexEventLikeError, buildFlexEventBusMessage };