From bc49bf520c72e59afadf883a17a1d1b4d946ba34 Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@foxmail.com>
Date: Sat, 30 Mar 2024 19:11:20 +0800
Subject: [PATCH] fix: reverse ws restart

---
 src/common/config.ts                       |  2 +-
 src/main/main.ts                           |  9 ++++++--
 src/main/setConfig.ts                      |  8 ++++++--
 src/onebot11/server/postOB11Event.ts       |  1 +
 src/onebot11/server/ws/ReverseWebsocket.ts |  7 ++++++-
 src/renderer/index.ts                      | 24 ++++++++++++++++++----
 6 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/src/common/config.ts b/src/common/config.ts
index 08996b4..600d20e 100644
--- a/src/common/config.ts
+++ b/src/common/config.ts
@@ -77,7 +77,7 @@ export class ConfigUtil {
 
     setConfig(config: Config) {
         this.config = config;
-        fsPromise.writeFile(this.configPath, JSON.stringify(config, null, 2), "utf-8").then()
+        fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2), "utf-8")
     }
 
     private checkOldConfig(currentConfig: Config | OB11Config,
diff --git a/src/main/main.ts b/src/main/main.ts
index 2cb558e..dd5e047 100644
--- a/src/main/main.ts
+++ b/src/main/main.ts
@@ -108,6 +108,7 @@ function onLoad() {
         let error = `${otherError}\n${httpServerError}\n${wsServerError}\n${ffmpegError}`
         error = error.replace("\n\n", "\n")
         error = error.trim();
+        log("查询llonebot错误信息", error);
         return error;
     })
     ipcMain.handle(CHANNEL_GET_CONFIG, async (event, arg) => {
@@ -116,7 +117,9 @@ function onLoad() {
     })
     ipcMain.on(CHANNEL_SET_CONFIG, (event, ask: boolean, config: Config) => {
         if (!ask) {
-            setConfig(config).then();
+            setConfig(config).then().catch(e => {
+                log("保存设置失败", e.stack)
+            });
             return
         }
         dialog.showMessageBox(mainWindow, {
@@ -128,7 +131,9 @@ function onLoad() {
             detail: 'LLOneBot配置已更改,是否保存?'
         }).then(result => {
             if (result.response === 0) {
-                setConfig(config).then();
+                setConfig(config).then().catch(e => {
+                    log("保存设置失败", e.stack)
+                });
             } else {
             }
         }).catch(err => {
diff --git a/src/main/setConfig.ts b/src/main/setConfig.ts
index b98d2e4..7759f56 100644
--- a/src/main/setConfig.ts
+++ b/src/main/setConfig.ts
@@ -4,10 +4,10 @@ import {ob11WebsocketServer} from "../onebot11/server/ws/WebsocketServer";
 import {ob11ReverseWebsockets} from "../onebot11/server/ws/ReverseWebsocket";
 import {llonebotError} from "../common/data";
 import {getConfigUtil} from "../common/config";
-import {checkFfmpeg} from "../common/utils";
+import {checkFfmpeg, log} from "../common/utils";
 
 export async function setConfig(config: Config) {
-    let oldConfig = getConfigUtil().getConfig();
+    let oldConfig = {...(getConfigUtil().getConfig())};
     getConfigUtil().setConfig(config)
     if (config.ob11.httpPort != oldConfig.ob11.httpPort && config.ob11.enableHttp) {
         ob11HTTPServer.restart(config.ob11.httpPort);
@@ -42,15 +42,19 @@ export async function setConfig(config: Config) {
     if (config.ob11.enableWsReverse) {
         // 判断反向ws地址有变化
         if (config.ob11.wsHosts.length != oldConfig.ob11.wsHosts.length) {
+            log("反向ws地址有变化, 重启反向ws服务")
             ob11ReverseWebsockets.restart();
         } else {
             for (const newHost of config.ob11.wsHosts) {
                 if (!oldConfig.ob11.wsHosts.includes(newHost)) {
+                    log("反向ws地址有变化, 重启反向ws服务")
                     ob11ReverseWebsockets.restart();
                     break;
                 }
             }
         }
     }
+    log("old config", oldConfig)
+    log("配置已更新", config)
     checkFfmpeg(config.ffmpeg).then()
 }
\ No newline at end of file
diff --git a/src/onebot11/server/postOB11Event.ts b/src/onebot11/server/postOB11Event.ts
index c7fa65b..567e563 100644
--- a/src/onebot11/server/postOB11Event.ts
+++ b/src/onebot11/server/postOB11Event.ts
@@ -63,6 +63,7 @@ export function unregisterWsEventSender(ws: WebSocketClass) {
 
 export function postWsEvent(event: PostEventType) {
     for (const ws of eventWSList) {
+        log(ws)
         new Promise(() => {
             wsReply(ws, event);
         }).then()
diff --git a/src/onebot11/server/ws/ReverseWebsocket.ts b/src/onebot11/server/ws/ReverseWebsocket.ts
index ac8a95a..005903d 100644
--- a/src/onebot11/server/ws/ReverseWebsocket.ts
+++ b/src/onebot11/server/ws/ReverseWebsocket.ts
@@ -128,8 +128,13 @@ class OB11ReverseWebsockets {
 
     stop() {
         for (let rws of rwsList) {
-            rws.stop();
+            try {
+                rws.stop();
+            }catch (e) {
+                log("反向ws关闭:", e.stack)
+            }
         }
+        rwsList.length = 0;
     }
 
     restart() {
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 9453a24..75a54dc 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -6,8 +6,21 @@ import StyleRaw from './style.css?raw';
 
 // 打开设置界面时触发
 
+function aprilFoolsEgg(){
+    let today = new Date()
+    if(today.getMonth() === 1 && today.getDate() === 1){
+        console.log("超时空猫猫!!!")
+        document.querySelectorAll(".nav-item.liteloader").forEach((node) => {
+            if (node.textContent.startsWith("LLOneBot")) {
+                node.querySelector(".name").innerHTML = "ChronoCat";
+            }
+        })
+    }
+}
+
 async function onSettingWindowCreated(view: Element) {
     window.llonebot.log("setting window created");
+    aprilFoolsEgg()
     const isEmpty = (value: any) => value === undefined || value === null || value === '';
     let config = await window.llonebot.getConfig();
     let ob11Config = {...config.ob11};
@@ -182,13 +195,16 @@ async function onSettingWindowCreated(view: Element) {
     const showError = async () => {
         await (new Promise((res) => setTimeout(() => res(true), 1000)));
 
-        const errDom = doc.querySelector('#llonebot-error');
+        const errDom = document.querySelector('#llonebot-error') || doc.querySelector('#llonebot-error');
         const errCodeDom = errDom.querySelector('code');
         const errMsg = await window.llonebot.getError();
 
-        if (!errMsg) return;
-
-        errDom.classList.add('show');
+        if (!errMsg){
+            errDom.classList.remove('show');
+        }
+        else {
+            errDom.classList.add('show');
+        }
         errCodeDom.innerHTML = errMsg;
     }
     showError().then();