You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailchat/shared/event/index.ts

46 lines
984 B
TypeScript

import { EventEmitter } from 'events';
import type { SendMessagePayload } from '../model/message';
/**
* 共享事件类型
*/
export interface SharedEventMap {
/**
* 修改配色方案
*/
loadColorScheme: (schemeName: string) => void;
/**
* 网络状态更新
*/
updateNetworkStatus: (
status: 'connected' | 'reconnecting' | 'disconnected'
) => void;
/**
* 发送消息
*/
sendMessage: (payload: SendMessagePayload) => void;
}
export type SharedEventType = keyof SharedEventMap;
const bus = new EventEmitter();
/**
* 事件中心
*/
export const sharedEvent = {
on<T extends SharedEventType>(eventName: T, listener: SharedEventMap[T]) {
bus.on(eventName, listener);
},
off<T extends SharedEventType>(eventName: T, listener: SharedEventMap[T]) {
bus.off(eventName, listener);
},
emit<T extends SharedEventType>(
eventName: T,
...args: Parameters<SharedEventMap[T]>
) {
bus.emit(eventName, ...args);
},
};