From 6248991b01bd1adcb5f6b4d9b851fccbc615a3d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Fri, 31 May 2024 20:38:31 +0800 Subject: [PATCH] refactor: NTEvent --- src/common/utils/EventTask.ts | 58 ++++++++++------------------------- 1 file changed, 16 insertions(+), 42 deletions(-) diff --git a/src/common/utils/EventTask.ts b/src/common/utils/EventTask.ts index dc746e51..ab348db6 100644 --- a/src/common/utils/EventTask.ts +++ b/src/common/utils/EventTask.ts @@ -2,13 +2,8 @@ import { NodeIKernelMsgListener } from "@/core"; import { NodeIQQNTWrapperSession } from "@/core/wrapper"; import { randomUUID } from "crypto"; -export enum NTEventMode { - Once = 1, - Twice = 2 -} interface Internal_MapKey { - mode: NTEventMode, timeout: number, createtime: number, func: Function @@ -78,50 +73,30 @@ export class NTEventWrapper { this.EventTask.delete(uuid); return; } - if (task.mode == NTEventMode.Once) { - this.EventTask.delete(uuid); - } task.func(...args); }) } - async CallOnceEvent any, ListenerType extends (...args: any[]) => void>(EventName = '', ListenerName = '', timeout: number = 3000, ...args: Parameters) { - return new Promise>>((resolve, reject) => { - const id = randomUUID(); - let complete = false; - let retData: ArrayLike> | undefined = undefined; - let databack = () => { - if (!complete) { - this.EventTask.delete(id); - reject(new Error('NTEvent EventName:' + EventName + ' ListenerName:' + ListenerName + ' timeout')); - } else { - resolve(retData as ArrayLike>); - } - } - let Timeouter = setTimeout(databack, timeout); - - this.EventTask.set(id, { - mode: NTEventMode.Once, - timeout: timeout, - createtime: Date.now(), - func: (...args: any[]) => { - clearTimeout(Timeouter); - complete = true; - retData = args as ArrayLike>; - databack(); - } - }); + async CallNoListenerEvent Promise,>(EventName = '', timeout: number = 3000, ...args: Parameters) { + return new Promise>((resolve, reject) => { let EventFunc = this.CreatEventFunction(EventName); - EventFunc!(...args); - }); + let complete = false; + let Timeouter = setTimeout(() => { + if (!complete) { + reject(new Error('NTEvent EventName:' + EventName + ' timeout')); + } + }, timeout); + let retData = await EventFunc!(...args); + complete = true; + resolve(retData); + } } - async CallTwiceEvent any, ListenerType extends (...args: any[]) => void>(EventName = '', ListenerName = '', timeout: number = 3000, ...args: Parameters) { + async CallNormalEvent Promise, ListenerType extends (...args: any[]) => void>(EventName = '', ListenerName = '', waitTimes = 1, timeout: number = 3000, ...args: Parameters) { return new Promise>>((resolve, reject) => { const id = randomUUID(); let complete = 0; let retData: ArrayLike> | undefined = undefined; let databack = () => { - if (complete < 2) { - this.EventTask.delete(id); + if (complete < waitTimes) { reject(new Error('NTEvent EventName:' + EventName + ' ListenerName:' + ListenerName + ' timeout')); } else { resolve(retData as ArrayLike>); @@ -130,20 +105,19 @@ export class NTEventWrapper { let Timeouter = setTimeout(databack, timeout); this.EventTask.set(id, { - mode: NTEventMode.Once, timeout: timeout, createtime: Date.now(), func: (...args: any[]) => { complete++; retData = args as ArrayLike>; - if (complete == 2) { + if (complete == waitTimes) { clearTimeout(Timeouter); databack(); } } }); let EventFunc = this.CreatEventFunction(EventName); - EventFunc!(...args); + await EventFunc!(...args); }); }