refactor: NTEvent Checker

This commit is contained in:
手瓜一十雪 2024-07-22 18:21:29 +08:00
parent c57497cd91
commit ab22f36b8a
3 changed files with 12 additions and 4 deletions

View File

@ -5,6 +5,7 @@ interface Internal_MapKey {
timeout: number, timeout: number,
createtime: number, createtime: number,
func: (...arg: any[]) => any, func: (...arg: any[]) => any,
checker: ((...args: any[]) => boolean) | undefined,
} }
export class ListenerClassBase { export class ListenerClassBase {
@ -90,10 +91,12 @@ export class NTEventWrapper {
this.EventTask.get(ListenerMainName)?.get(ListenerSubName)?.delete(uuid); this.EventTask.get(ListenerMainName)?.get(ListenerSubName)?.delete(uuid);
return; return;
} }
task.func(...args); if (task.checker && task.checker(...args)) {
task.func(...args);
}
}); });
} }
async CallNoListenerEvent<EventType extends (...args: any[]) => Promise<any>,>(EventName = '', timeout: number = 3000, ...args: Parameters<EventType>) { async CallNoListenerEvent<EventType extends (...args: any[]) => Promise<any>>(EventName = '', timeout: number = 3000, ...args: Parameters<EventType>) {
return new Promise<Awaited<ReturnType<EventType>>>(async (resolve, reject) => { return new Promise<Awaited<ReturnType<EventType>>>(async (resolve, reject) => {
const EventFunc = this.CreatEventFunction<EventType>(EventName); const EventFunc = this.CreatEventFunction<EventType>(EventName);
let complete = false; let complete = false;
@ -107,14 +110,15 @@ export class NTEventWrapper {
resolve(retData); resolve(retData);
}); });
} }
async CallNormalEvent<EventType extends (...args: any[]) => Promise<any>, ListenerType extends (...args: any[]) => void>(EventName = '', ListenerName = '', waitTimes = 1, timeout: number = 3000, ...args: Parameters<EventType>) { async CallNormalEvent<EventType extends (...args: any[]) => Promise<any>, ListenerType extends (...args: any[]) => void>
(EventName = '', ListenerName = '', waitTimes = 1, timeout: number = 3000, checker: (...args: Parameters<ListenerType>) => boolean, ...args: Parameters<EventType>) {
return new Promise<[EventRet: Awaited<ReturnType<EventType>>, ...Parameters<ListenerType>]>(async (resolve, reject) => { return new Promise<[EventRet: Awaited<ReturnType<EventType>>, ...Parameters<ListenerType>]>(async (resolve, reject) => {
const id = randomUUID(); const id = randomUUID();
let complete = 0; let complete = 0;
let retData: Parameters<ListenerType> | undefined = undefined; let retData: Parameters<ListenerType> | undefined = undefined;
let retEvent: any = {}; let retEvent: any = {};
const databack = () => { const databack = () => {
if (complete < waitTimes) { if (complete == 0) {
reject(new Error('NTEvent EventName:' + EventName + ' ListenerName:' + ListenerName + ' timeout')); reject(new Error('NTEvent EventName:' + EventName + ' ListenerName:' + ListenerName + ' timeout'));
} else { } else {
resolve([retEvent as Awaited<ReturnType<EventType>>, ...retData!]); resolve([retEvent as Awaited<ReturnType<EventType>>, ...retData!]);
@ -128,6 +132,7 @@ export class NTEventWrapper {
const eventCallbak = { const eventCallbak = {
timeout: timeout, timeout: timeout,
createtime: Date.now(), createtime: Date.now(),
checker: checker,
func: (...args: any[]) => { func: (...args: any[]) => {
complete++; complete++;
//console.log('func', ...args); //console.log('func', ...args);

View File

@ -14,6 +14,7 @@ export class NTQQFriendApi {
'NodeIKernelBuddyListener/onBuddyListChange', 'NodeIKernelBuddyListener/onBuddyListChange',
1, 1,
5000, 5000,
() => true,
forced forced
); );
const friends: User[] = []; const friends: User[] = [];

View File

@ -15,6 +15,7 @@ export class NTQQGroupApi {
'NodeIKernelGroupListener/onGroupListUpdate', 'NodeIKernelGroupListener/onGroupListUpdate',
1, 1,
5000, 5000,
()=>true,
forced forced
); );
return groupList; return groupList;
@ -63,6 +64,7 @@ export class NTQQGroupApi {
'NodeIKernelGroupListener/onGroupSingleScreenNotifies', 'NodeIKernelGroupListener/onGroupSingleScreenNotifies',
1, 1,
5000, 5000,
()=>true,
false, false,
'', '',
num num