mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
refactor: NTEvent
This commit is contained in:
parent
4f4af5985a
commit
31f8f884f1
@ -1,21 +1,26 @@
|
|||||||
|
import { NodeIKernelMsgListener } from "@/core";
|
||||||
import { NodeIQQNTWrapperSession } from "@/core/wrapper";
|
import { NodeIQQNTWrapperSession } from "@/core/wrapper";
|
||||||
|
|
||||||
import { randomUUID } from "crypto";
|
import { randomUUID } from "crypto";
|
||||||
// export enum NTEventMode {
|
// export enum NTEventMode {
|
||||||
// Once = 1,
|
// Once = 1,
|
||||||
// Twice = 2
|
// Twice = 2
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// export interface NTEventType<U extends (...args: any[]) => Promise<any>> {
|
// export interface NTEventType<U extends (...args: any[]) => Promise<any>> {
|
||||||
// EventName: string,
|
// EventName: string,
|
||||||
// EventFunction: U,
|
// EventFunction: U,
|
||||||
// ListenerName: string,
|
// ListenerName: string,
|
||||||
// ListenerFunction: Function
|
// ListenerFunction: Function
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// interface Internal_MapKey {
|
// interface Internal_MapKey {
|
||||||
// mode: NTEventMode,
|
// mode: NTEventMode,
|
||||||
// timeout: number,
|
// timeout: number,
|
||||||
// createtime: number,
|
// createtime: number,
|
||||||
// func: Function
|
// func: Function
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// export class NTEvent<T extends (...args: any[]) => any, R = any> {
|
// export class NTEvent<T extends (...args: any[]) => any, R = any> {
|
||||||
// EventData: NTEventType<T>;
|
// EventData: NTEventType<T>;
|
||||||
// EventTask: Map<string, Internal_MapKey> = new Map<string, Internal_MapKey>();
|
// EventTask: Map<string, Internal_MapKey> = new Map<string, Internal_MapKey>();
|
||||||
@ -103,14 +108,17 @@ export class ListenerClassBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class NTEventWrapper {
|
export class NTEventWrapper {
|
||||||
private ListenerMap: Map<string, typeof ListenerClassBase>;
|
private ListenerMap: Map<string, typeof ListenerClassBase> | undefined;
|
||||||
private WrapperSession: NodeIQQNTWrapperSession;
|
private WrapperSession: NodeIQQNTWrapperSession | undefined;
|
||||||
private ListenerManger: Map<string, ListenerClassBase> = new Map<string, ListenerClassBase>();
|
private ListenerManger: Map<string, ListenerClassBase> = new Map<string, ListenerClassBase>();
|
||||||
constructor({ ListenerMap, WrapperSession }: { ListenerMap: Map<string, typeof ListenerClassBase>, WrapperSession: NodeIQQNTWrapperSession }) {
|
constructor() {
|
||||||
|
|
||||||
|
}
|
||||||
|
init({ ListenerMap, WrapperSession }: { ListenerMap: Map<string, typeof ListenerClassBase>, WrapperSession: NodeIQQNTWrapperSession }) {
|
||||||
this.ListenerMap = ListenerMap;
|
this.ListenerMap = ListenerMap;
|
||||||
this.WrapperSession = WrapperSession;
|
this.WrapperSession = WrapperSession;
|
||||||
}
|
}
|
||||||
GetEvent<T extends (...args: any) => any>(eventName: string) {
|
CreatEventFunction<T extends (...args: any) => any>(eventName: string): T | undefined {
|
||||||
// 将 eventName 'NodeIKernelProfileLikeService/GetTest' => 转换成 this.WrapperSession.getProfileLikeService().getTest
|
// 将 eventName 'NodeIKernelProfileLikeService/GetTest' => 转换成 this.WrapperSession.getProfileLikeService().getTest
|
||||||
let eventNameArr = eventName.split('/');
|
let eventNameArr = eventName.split('/');
|
||||||
type eventType = {
|
type eventType = {
|
||||||
@ -124,7 +132,7 @@ export class NTEventWrapper {
|
|||||||
//重新绑定this
|
//重新绑定this
|
||||||
event = event.bind(services);
|
event = event.bind(services);
|
||||||
if (event) {
|
if (event) {
|
||||||
return event;
|
return event as T;
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
@ -132,16 +140,27 @@ export class NTEventWrapper {
|
|||||||
|
|
||||||
}
|
}
|
||||||
// 获取某个Listener
|
// 获取某个Listener
|
||||||
GetListener(listenerName: string, uniqueCode: string = "") {
|
CreatListenerFunction<T>(listenerName: string, uniqueCode: string = ""): T {
|
||||||
let ListenerType = this.ListenerMap.get(listenerName);
|
let ListenerType = this.ListenerMap!.get(listenerName);
|
||||||
let Listener = this.ListenerManger.get(listenerName + uniqueCode);
|
let Listener = this.ListenerManger.get(listenerName + uniqueCode);
|
||||||
if (!Listener && ListenerType) {
|
if (!Listener && ListenerType) {
|
||||||
Listener = new ListenerType();
|
Listener = new ListenerType();
|
||||||
this.ListenerManger.set(listenerName + uniqueCode, Listener);
|
this.ListenerManger.set(listenerName + uniqueCode, Listener);
|
||||||
}
|
}
|
||||||
return Listener;
|
return Listener as T;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 示例代码 快速创建事件
|
||||||
|
// let NTEvent = new NTEventWrapper();
|
||||||
|
// let TestEvent = NTEvent.CreatEventFunction<(force: boolean) => Promise<Number>>('NodeIKernelProfileLikeService/GetTest');
|
||||||
|
// if (TestEvent) {
|
||||||
|
// TestEvent(true);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 示例代码 快速创建监听Listener类
|
||||||
|
// let NTEvent = new NTEventWrapper();
|
||||||
|
// NTEvent.CreatListenerFunction<NodeIKernelMsgListener>('NodeIKernelMsgListener', 'core')
|
||||||
|
|
||||||
|
|
||||||
// 初步构想
|
// 初步构想
|
||||||
// NTEventDispatch NTEvent NTEventWrapper
|
// NTEventDispatch NTEvent NTEventWrapper
|
||||||
|
Loading…
x
Reference in New Issue
Block a user