From b39d8bae273f47f19c207cbbee06d0a0e1f78635 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: Sun, 16 Mar 2025 10:42:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20login=20timer=20/=20add:=E4=B8=8D?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E7=9A=84promise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listeners/NodeIKernelLoginListener.ts | 2 +- src/core/services/NodeIKernelLoginService.ts | 3 ++ src/shell/base.ts | 28 +++++++++++-------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/core/listeners/NodeIKernelLoginListener.ts b/src/core/listeners/NodeIKernelLoginListener.ts index 91046e0b..51d05711 100644 --- a/src/core/listeners/NodeIKernelLoginListener.ts +++ b/src/core/listeners/NodeIKernelLoginListener.ts @@ -1,5 +1,5 @@ export class NodeIKernelLoginListener { - onLoginConnected(...args: any[]): any { + onLoginConnected(): Promise | void { } onLoginDisConnected(...args: any[]): any { diff --git a/src/core/services/NodeIKernelLoginService.ts b/src/core/services/NodeIKernelLoginService.ts index 8c90144a..c3f7602c 100644 --- a/src/core/services/NodeIKernelLoginService.ts +++ b/src/core/services/NodeIKernelLoginService.ts @@ -60,7 +60,10 @@ export interface QuickLoginResult { } export interface NodeIKernelLoginService { + getMsfStatus: () => number; + setLoginMiscData(arg0: string, value: string): unknown; + getMachineGuid(): string; get(): NodeIKernelLoginService; diff --git a/src/shell/base.ts b/src/shell/base.ts index ecd8e0b4..66f50b92 100644 --- a/src/shell/base.ts +++ b/src/shell/base.ts @@ -30,6 +30,7 @@ import { InitWebUi } from '@/webui'; import { WebUiDataRuntime } from '@/webui/src/helper/Data'; import { napCatVersion } from '@/common/version'; import { NodeIO3MiscListener } from '@/core/listeners/NodeIO3MiscListener'; +import { sleep } from '@/common/helper'; // NapCat Shell App ES 入口文件 async function handleUncaughtExceptions(logger: LogWrapper) { process.on('uncaughtException', (err) => { @@ -113,7 +114,7 @@ async function handleLogin( quickLoginUin: string | undefined, historyLoginList: LoginListItem[] ): Promise { - return new Promise((resolve) => { + return new Promise(async (resolve) => { const loginListener = new NodeIKernelLoginListener(); let isLogined = false; @@ -199,20 +200,23 @@ async function handleLogin( } }); }); - + let network_ok = false; + while (!network_ok) { + network_ok = loginService.getMsfStatus() === 0; + logger.log('等待网络连接...'); + await sleep(500); + } if (quickLoginUin) { if (historyLoginList.some(u => u.uin === quickLoginUin)) { logger.log('正在快速登录 ', quickLoginUin); - setTimeout(() => { - loginService.quickLoginWithUin(quickLoginUin) - .then(result => { - if (result.loginErrorInfo.errMsg) { - logger.logError('快速登录错误:', result.loginErrorInfo.errMsg); - if (!isLogined) loginService.getQRCodePicture(); - } - }) - .catch(); - }, 1000); + loginService.quickLoginWithUin(quickLoginUin) + .then(result => { + if (result.loginErrorInfo.errMsg) { + logger.logError('快速登录错误:', result.loginErrorInfo.errMsg); + if (!isLogined) loginService.getQRCodePicture(); + } + }) + .catch(); } else { logger.logError('快速登录失败,未找到该 QQ 历史登录记录,将使用二维码登录方式'); if (!isLogined) loginService.getQRCodePicture();