From e3a8285f6c477cde600368d1e97af3a396a84482 Mon Sep 17 00:00:00 2001 From: linyuchen Date: Sat, 27 Apr 2024 17:04:53 +0800 Subject: [PATCH] fix: listener proxy --- src/common/server/http.ts | 15 ++++++++------- src/common/server/websocket.ts | 4 +++- src/common/utils/ConfigBase.ts | 6 +++++- src/onebot11/config.ts | 4 ++++ src/onebot11/main.ts | 4 ++-- src/onebot11/server/ws/WebsocketServer.ts | 6 ++++-- src/onebot11/server/ws/reply.ts | 8 ++++++-- 7 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/common/server/http.ts b/src/common/server/http.ts index 8721d7d9..2710fc8b 100644 --- a/src/common/server/http.ts +++ b/src/common/server/http.ts @@ -53,12 +53,12 @@ export abstract class HttpServerBase { next(); } - start(port: number) { + start(port: number, host: string) { try { this.expressAPP.get('/', (req: Request, res: Response) => { res.send(`${this.name}已启动`); }); - this.listen(port); + this.listen(port, host); } catch (e: any) { logError('HTTP服务启动失败', e.toString()); // llonebotError.httpServerError = "HTTP服务启动失败, " + e.toString() @@ -73,9 +73,9 @@ export abstract class HttpServerBase { } } - restart(port: number) { + restart(port: number, host: string) { this.stop(); - this.start(port); + this.start(port, host); } abstract handleFailed(res: Response, payload: any, err: any): void @@ -108,9 +108,10 @@ export abstract class HttpServerBase { }); } - protected listen(port: number) { - this.server = this.expressAPP.listen(port, '0.0.0.0', () => { - const info = `${this.name} started 0.0.0.0:${port}`; + protected listen(port: number, host: string = '0.0.0.0') { + host = host || '0.0.0.0'; + this.server = this.expressAPP.listen(port, host, () => { + const info = `${this.name} started ${host}:${port}`; log(info); }); } diff --git a/src/common/server/websocket.ts b/src/common/server/websocket.ts index 947ca2aa..36b32dab 100644 --- a/src/common/server/websocket.ts +++ b/src/common/server/websocket.ts @@ -27,12 +27,14 @@ export class WebsocketServerBase { constructor() { } - start(port: number) { + start(port: number, host: string = '') { try { this.ws = new WebSocketServer({ port , + host: '', maxPayload: 1024 * 1024 * 1024 }); + log(`ws服务启动成功, ${host}:${port}`); } catch (e: any) { throw Error('ws服务启动失败, ' + e.toString()); } diff --git a/src/common/utils/ConfigBase.ts b/src/common/utils/ConfigBase.ts index 1540b53d..54bb9e93 100644 --- a/src/common/utils/ConfigBase.ts +++ b/src/common/utils/ConfigBase.ts @@ -36,6 +36,9 @@ export class ConfigBase{ const data = JSON.parse(fs.readFileSync(configPath, 'utf-8')); logDebug(`配置文件${configPath}已加载`, data); Object.assign(this, data); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + this.save(this); // 保存一次,让新版本的字段写入 return this; } catch (e: any) { if (e instanceof SyntaxError) { @@ -48,9 +51,10 @@ export class ConfigBase{ } save(config: T) { + Object.assign(this, config); const configPath = this.getConfigPath(); try { - fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); + fs.writeFileSync(configPath, JSON.stringify(this, null, 2)); } catch (e: any) { logError(`保存配置文件 ${configPath} 时发生错误:`, e.message); } diff --git a/src/onebot11/config.ts b/src/onebot11/config.ts index b489d341..84414292 100644 --- a/src/onebot11/config.ts +++ b/src/onebot11/config.ts @@ -5,9 +5,11 @@ import { logDebug, logError } from '@/common/utils/log'; import { ConfigBase } from '@/common/utils/ConfigBase'; export interface OB11Config { + httpHost: string; httpPort: number; httpPostUrls: string[]; httpSecret: string; + wsHost: string; wsPort: number; wsReverseUrls: string[]; enableHttp: boolean; @@ -29,9 +31,11 @@ export interface OB11Config { class Config extends ConfigBase implements OB11Config { + httpHost: string = ''; httpPort: number = 3000; httpPostUrls: string[] = []; httpSecret = ''; + wsHost: string = ''; wsPort = 3001; wsReverseUrls: string[] = []; enableHttp = false; diff --git a/src/onebot11/main.ts b/src/onebot11/main.ts index 038a78c2..a4f218d2 100644 --- a/src/onebot11/main.ts +++ b/src/onebot11/main.ts @@ -52,10 +52,10 @@ export class NapCatOnebot11 { selfInfo.nick = user.nick; }).catch(logError); if (ob11Config.enableHttp) { - ob11HTTPServer.start(ob11Config.httpPort); + ob11HTTPServer.start(ob11Config.httpPort, ob11Config.httpHost); } if (ob11Config.enableWs) { - ob11WebsocketServer.start(ob11Config.wsPort); + ob11WebsocketServer.start(ob11Config.wsPort, ob11Config.wsHost); } if (ob11Config.enableWsReverse) { ob11ReverseWebsockets.start(); diff --git a/src/onebot11/server/ws/WebsocketServer.ts b/src/onebot11/server/ws/WebsocketServer.ts index 9eb6a16e..5f27188e 100644 --- a/src/onebot11/server/ws/WebsocketServer.ts +++ b/src/onebot11/server/ws/WebsocketServer.ts @@ -18,9 +18,9 @@ const heartbeatRunning = false; class OB11WebsocketServer extends WebsocketServerBase { - public start(port: number) { + public start(port: number, host: string) { this.token = ob11Config.token; - super.start(port); + super.start(port, host); } authorizeFailed(wsClient: WebSocket) { @@ -43,6 +43,8 @@ class OB11WebsocketServer extends WebsocketServerBase { onConnect(wsClient: WebSocket, url: string, req: IncomingMessage) { if (url == '/api' || url == '/api/' || url == '/') { wsClient.on('message', async (msg) => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error let receiveData: { action: ActionName, params: any, echo?: any } = { action: '', params: {} }; let echo = null; try { diff --git a/src/onebot11/server/ws/reply.ts b/src/onebot11/server/ws/reply.ts index 641d2842..7e53a1c6 100644 --- a/src/onebot11/server/ws/reply.ts +++ b/src/onebot11/server/ws/reply.ts @@ -1,14 +1,18 @@ import { WebSocket as WebSocketClass } from 'ws'; import { OB11Response } from '../../action/OB11Response'; import { PostEventType } from '../postOB11Event'; -import { log, logDebug, logError } from '../../../common/utils/log'; -import { isNull } from '../../../common/utils/helper'; +import { log, logDebug, logError } from '@/common/utils/log'; +import { isNull } from '@/common/utils/helper'; export function wsReply(wsClient: WebSocketClass, data: OB11Response | PostEventType) { try { const packet = Object.assign({}, data); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error if (isNull(packet['echo'])) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error delete packet['echo']; } wsClient.send(JSON.stringify(packet));