diff --git a/src/main/config/profile.ts b/src/main/config/profile.ts index 23cb8fb..0dda953 100644 --- a/src/main/config/profile.ts +++ b/src/main/config/profile.ts @@ -8,6 +8,7 @@ import yaml from 'yaml' import fs from 'fs' import { dialog } from 'electron' import { addProfileUpdater } from '../core/profileUpdater' +import { pauseWebsockets } from '../core/mihomoApi' let profileConfig: IProfileConfig // profile.yaml @@ -27,7 +28,9 @@ export async function changeCurrentProfile(id: string): Promise { const oldId = getProfileConfig().current profileConfig.current = id try { + const recover = pauseWebsockets() await startCore() + recover() } catch (e) { profileConfig.current = oldId } finally { @@ -177,7 +180,9 @@ export function getProfileStr(id: string): string { export async function setProfileStr(id: string, content: string): Promise { fs.writeFileSync(profilePath(id), content, 'utf-8') if (id === getProfileConfig().current) { + const recover = pauseWebsockets() await startCore() + recover() } } diff --git a/src/main/core/mihomoApi.ts b/src/main/core/mihomoApi.ts index 269fc08..28a96a4 100644 --- a/src/main/core/mihomoApi.ts +++ b/src/main/core/mihomoApi.ts @@ -340,3 +340,26 @@ const mihomoConnections = (): void => { } } } + +export const pauseWebsockets = () => { + const recoverList: (() => void)[] = [] + if (mihomoTrafficWs) { + stopMihomoTraffic() + recoverList.push(startMihomoTraffic) + } + if (mihomoMemoryWs) { + stopMihomoMemory() + recoverList.push(startMihomoMemory) + } + if (mihomoLogsWs) { + stopMihomoLogs() + recoverList.push(startMihomoLogs) + } + if (mihomoConnectionsWs) { + stopMihomoConnections() + recoverList.push(startMihomoConnections) + } + return (): void => { + recoverList.forEach((recover) => recover()) + } +} diff --git a/src/main/utils/ipc.ts b/src/main/utils/ipc.ts index 167beff..438d9f5 100644 --- a/src/main/utils/ipc.ts +++ b/src/main/utils/ipc.ts @@ -14,6 +14,7 @@ import { mihomoUpgradeGeo, mihomoVersion, patchMihomoConfig, + pauseWebsockets, startMihomoConnections, startMihomoLogs, stopMihomoConnections, @@ -79,7 +80,11 @@ export function registerIpcMainHandlers(): void { ipcMain.handle('changeCurrentProfile', (_e, id) => changeCurrentProfile(id)) ipcMain.handle('addProfileItem', (_e, item) => addProfileItem(item)) ipcMain.handle('removeProfileItem', (_e, id) => removeProfileItem(id)) - ipcMain.handle('restartCore', startCore) + ipcMain.handle('restartCore', async () => { + const recover = pauseWebsockets() + await startCore() + recover() + }) ipcMain.handle('triggerSysProxy', (_e, enable) => triggerSysProxy(enable)) ipcMain.handle('isEncryptionAvailable', isEncryptionAvailable) ipcMain.handle('encryptString', (_e, str) => safeStorage.encryptString(str))