diff --git a/src/onebot11/server/ws/ReverseWebsocket.ts b/src/onebot11/server/ws/ReverseWebsocket.ts index 1f72b74..0f5da84 100644 --- a/src/onebot11/server/ws/ReverseWebsocket.ts +++ b/src/onebot11/server/ws/ReverseWebsocket.ts @@ -7,9 +7,10 @@ import {ActionName} from "../../action/types"; import {OB11Response} from "../../action/utils"; import BaseAction from "../../action/BaseAction"; import {actionMap} from "../../action"; -import {registerWsEventSender, unregisterWsEventSender} from "../postOB11Event"; +import {postWsEvent, registerWsEventSender, unregisterWsEventSender} from "../postOB11Event"; import {wsReply} from "./reply"; import {WebSocket as WebSocketClass} from "ws"; +import {OB11HeartbeatEvent} from "../../event/meta/OB11HeartbeatEvent"; export let rwsList: ReverseWebsocket[] = []; @@ -76,7 +77,7 @@ export class ReverseWebsocket { } private connect() { - const {token} = getConfigUtil().getConfig() + const {token, heartInterval} = getConfigUtil().getConfig() this.websocket = new WebSocketClass(this.url, { handshakeTimeout: 2000, perMessageDeflate: false, @@ -101,7 +102,11 @@ export class ReverseWebsocket { this.websocket.on("error", log); + const wsClientInterval = setInterval(() => { + postWsEvent(new OB11HeartbeatEvent(selfInfo.online, true, heartInterval)); + }, heartInterval); // 心跳包 this.websocket.on("close", () => { + clearInterval(wsClientInterval); log("The websocket connection: " + this.url + " closed, trying reconnecting..."); this.onclose(); }); diff --git a/src/onebot11/server/ws/WebsocketServer.ts b/src/onebot11/server/ws/WebsocketServer.ts index a002011..7d13b65 100644 --- a/src/onebot11/server/ws/WebsocketServer.ts +++ b/src/onebot11/server/ws/WebsocketServer.ts @@ -10,6 +10,7 @@ import {OB11HeartbeatEvent} from "../../event/meta/OB11HeartbeatEvent"; import {WebsocketServerBase} from "../../../common/server/websocket"; import {IncomingMessage} from "node:http"; import {wsReply} from "./reply"; +import {selfInfo} from "../../../common/data"; let heartbeatRunning = false; @@ -58,7 +59,7 @@ class OB11WebsocketServer extends WebsocketServerBase { } const {heartInterval} = getConfigUtil().getConfig(); const wsClientInterval = setInterval(() => { - postWsEvent(new OB11HeartbeatEvent(true, true, heartInterval)); + postWsEvent(new OB11HeartbeatEvent(selfInfo.online, true, heartInterval)); }, heartInterval); // 心跳包 wsClient.on("close", () => { log("event上报ws客户端已断开") diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 033ebd6..e525ec9 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -74,7 +74,7 @@ async function onSettingWindowCreated(view: Element) { </setting-item> <div id="config-ob11-wsHosts-list"></div> </div>`, - SettingItem('反向 WebSocket 服务心跳间隔', + SettingItem(' WebSocket 服务心跳间隔', '控制每隔多久发送一个心跳包,单位为毫秒', `<div class="q-input"><input class="q-input__inner" data-config-key="heartInterval" type="number" min="1000" value="${config.heartInterval}" placeholder="${config.heartInterval}" /></div>`, ),