From 807ac913daa13a7e6e34e9a39d0eee5886c10cbf Mon Sep 17 00:00:00 2001 From: Minoricew <154642983+Minoricew@users.noreply.github.com> Date: Tue, 17 Jun 2025 18:14:58 +0800 Subject: [PATCH] =?UTF-8?q?[=F0=9F=A4=AF=20Refactor]=20Use=20standalone=20?= =?UTF-8?q?window=20for=20WebSocket=20connections?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. [-] 删除了对于 desktopAssistant 的 Hook 逻辑 2. [/] 现在不再使用 desktopAssistant 保活 WS 连接, 而是用一个单独的不可见窗口处理 WS (#25) --- .../init/main/ipcModules/plsIpcHandler.js | 4 +- src/aura/init/main/windowHooksManager.js | 5 ++- src/aura/types/render/global.d.ts | 2 +- .../ui/hookDefinitions/desktopAssistant.js | 15 ------- src/aura/ui/js/plsConnectionManager.js | 13 +++++-- .../pages/windows/auraWsKeepAlive/index.html | 16 ++++++++ src/aura/utils/pls.js | 39 +++++++++++++++++++ src/core/hook.js | 13 ++++++- 8 files changed, 84 insertions(+), 23 deletions(-) delete mode 100755 src/aura/ui/hookDefinitions/desktopAssistant.js create mode 100644 src/aura/ui/pages/windows/auraWsKeepAlive/index.html create mode 100644 src/aura/utils/pls.js diff --git a/src/aura/init/main/ipcModules/plsIpcHandler.js b/src/aura/init/main/ipcModules/plsIpcHandler.js index 29802d1..ffc11f7 100755 --- a/src/aura/init/main/ipcModules/plsIpcHandler.js +++ b/src/aura/init/main/ipcModules/plsIpcHandler.js @@ -418,7 +418,7 @@ const applyPlsIpcHandler = (ipcMain) => { */ (_event, arg) => { ipcMain.send( - "desktopAssistant", + "auraWsKeepAlive", `${methodBase}.ws.post.onReqSendMsg`, arg ); @@ -568,7 +568,7 @@ const applyPlsIpcHandler = (ipcMain) => { status: "Already", }; } else { - ipcMain.send("desktopAssistant", `${methodBase}.retryPlsConnect`, arg); + ipcMain.send("auraWsKeepAlive", `${methodBase}.retryPlsConnect`, arg); return { success: true, diff --git a/src/aura/init/main/windowHooksManager.js b/src/aura/init/main/windowHooksManager.js index e8d860d..0c634b2 100755 --- a/src/aura/init/main/windowHooksManager.js +++ b/src/aura/init/main/windowHooksManager.js @@ -14,7 +14,7 @@ class WindowHooksManager { const hooksPath = path.join(__dirname, "../../../aura/mainProcess/hooks"); - /** @type {import("../../types/main/core").HooksMap} */ + /** @type {import("../../types/main/core").UIHooksMap} */ const hooks = new Map(); try { @@ -55,6 +55,9 @@ class WindowHooksManager { browserWindowInstance ) { const stripWindowName = windowName.split("_")[0]; + + if (!global.__HUGO_AURA__.windowHooks) return; + if (!global.__HUGO_AURA__.windowHooks.has(stripWindowName)) { console.log( `[HugoAura / Init / WDH] Window ${windowName} has no corresponding main process hooks, ignoring...` diff --git a/src/aura/types/render/global.d.ts b/src/aura/types/render/global.d.ts index 49a011a..3bf021a 100755 --- a/src/aura/types/render/global.d.ts +++ b/src/aura/types/render/global.d.ts @@ -8,7 +8,7 @@ interface AssistantHugoAuraGlobal extends HugoAuraGlobal { plsSettings: Record; } -interface DesktopAssistantHugoAuraGlobal extends HugoAuraGlobal { +interface AuraWSKeepAliveWindowHugoAuraGlobal extends HugoAuraGlobal { plsWs: WebSocket | null; plsStats: PLSStatus; } diff --git a/src/aura/ui/hookDefinitions/desktopAssistant.js b/src/aura/ui/hookDefinitions/desktopAssistant.js deleted file mode 100755 index 40fa0de..0000000 --- a/src/aura/ui/hookDefinitions/desktopAssistant.js +++ /dev/null @@ -1,15 +0,0 @@ -// @ts-check - -/** - * @type {import("../../types/render/uiHook").UIHookConfig} - */ -const def = { - targets: {}, - globalStyles: ["ui/css/global.css"], - globalJS: ["ui/js/global.js", "ui/js/plsConnectionManager.js"], - onLoaded: ` - console.log('[HugoAura / UI / Hooks / Desktop Assistant] Page loaded.'); - `, -}; - -module.exports = def; diff --git a/src/aura/ui/js/plsConnectionManager.js b/src/aura/ui/js/plsConnectionManager.js index 20bec23..d71bef1 100755 --- a/src/aura/ui/js/plsConnectionManager.js +++ b/src/aura/ui/js/plsConnectionManager.js @@ -1,5 +1,12 @@ // @ts-check (() => { + if (!global.__HUGO_AURA__) + global.__HUGO_AURA__ = { + configInit: true, + auraDir: "", + version: "", + }; + if (!global.__HUGO_AURA__.plsStats) global.__HUGO_AURA__.plsStats = { installed: false, @@ -12,8 +19,8 @@ }; const IPC_METHOD_BASE = "$aura.pls"; - const REQUIRE_BASE = "../../aura/ui"; - const __SCOPE = "desktopAssistant"; + const REQUIRE_BASE = "../../.."; + const __SCOPE = "auraWsKeepAlive"; const PLS_REG_PATH = "ProxyLayerServices"; @@ -312,7 +319,7 @@ const onSetup = () => { if (!global.ipcRenderer) { // @ts-ignore - global.ipcRenderer = require("electron").global.ipcRenderer; + global.ipcRenderer = require("electron").ipcRenderer; } initPlsConnection(); diff --git a/src/aura/ui/pages/windows/auraWsKeepAlive/index.html b/src/aura/ui/pages/windows/auraWsKeepAlive/index.html new file mode 100644 index 0000000..5689393 --- /dev/null +++ b/src/aura/ui/pages/windows/auraWsKeepAlive/index.html @@ -0,0 +1,16 @@ + + + + Aura WebSocket KeepAlive Window + + + + + + diff --git a/src/aura/utils/pls.js b/src/aura/utils/pls.js new file mode 100644 index 0000000..69f2eec --- /dev/null +++ b/src/aura/utils/pls.js @@ -0,0 +1,39 @@ +// @ts-check + +/** + * @param {Electron} electron + */ +const createWsWindow = (electron) => { + const path = require("path"); + const { BrowserWindow } = electron; + const window = new BrowserWindow({ + width: 0, + height: 0, + frame: false, + skipTaskbar: true, + transparent: true, + alwaysOnTop: true, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + devTools: true, + }, + }); + + window.setIgnoreMouseEvents(true); + window.loadFile( + path.join( + __dirname, + "..", + "ui", + "pages", + "windows", + "auraWsKeepAlive", + "index.html" + ) + ); + + return window; +}; + +module.exports = { createWsWindow }; diff --git a/src/core/hook.js b/src/core/hook.js index deab11f..fefbd82 100755 --- a/src/core/hook.js +++ b/src/core/hook.js @@ -47,6 +47,7 @@ const NetworkHook = require("../aura/init/rendererHook/networkHook"); const ConfigManager = require("../aura/init/shared/configManager"); const RegistryManager = require("../aura/init/shared/registryManager"); const { buildIpcMain } = require("../aura/init/main/ipcHandler"); +const plsUtils = require("../aura/utils/pls"); const { initLogger } = require("../aura/init/main/logger"); @@ -97,7 +98,10 @@ const launcher = ({ central, windowName, config }) => { app.exit(0); }; - global.__HUGO_AURA__.auraDir = path.join(getUserDocumentsDirPath(), "HugoAura"); + global.__HUGO_AURA__.auraDir = path.join( + getUserDocumentsDirPath(), + "HugoAura" + ); // >>> Init Logger <<< // initLogger(windowName); @@ -146,6 +150,13 @@ const launcher = ({ central, windowName, config }) => { config.canOpenDevTool = true; } + // >>> Create WebSocket KeepAlive Window <<< // + if (!global.__HUGO_AURA__.hookedWindows?.has("auraWsKeepAlive")) { + const wsKaWin = plsUtils.createWsWindow(electron); + // @ts-expect-error + global.__HUGO_AURA__.hookedWindows.set("auraWsKeepAlive", wsKaWin); + } + // >>> Listeners <<< // /**