diff --git a/src/onebot/index.ts b/src/onebot/index.ts index cc0cf24d..1702c8d7 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -176,67 +176,33 @@ export class NapCatOneBot11Adapter { }; } - private async reloadNetwork(prev: OneBotConfig, now: OneBotConfig) { + private async reloadNetwork(prev: OneBotConfig, now: OneBotConfig): Promise { const prevLog = await this.creatOneBotLog(prev); const newLog = await this.creatOneBotLog(now); this.context.logger.log(`[Notice] [OneBot11] 配置变更前:\n${prevLog}`); this.context.logger.log(`[Notice] [OneBot11] 配置变更后:\n${newLog}`); - - const { added: addedHttpServers, removed: removedHttpServers } = this.findDifference(prev.network.httpServers, now.network.httpServers); - const { added: addedHttpClients, removed: removedHttpClients } = this.findDifference(prev.network.httpClients, now.network.httpClients); - const { added: addedWebSocketServers, removed: removedWebSocketServers } = this.findDifference(prev.network.websocketServers, now.network.websocketServers); - const { added: addedWebSocketClients, removed: removedWebSocketClients } = this.findDifference(prev.network.websocketClients, now.network.websocketClients); - - await this.handleRemovedAdapters(removedHttpServers); - await this.handleRemovedAdapters(removedHttpClients); - await this.handleRemovedAdapters(removedWebSocketServers); - await this.handleRemovedAdapters(removedWebSocketClients); - - await this.handlerConfigChange(now.network.httpServers); - await this.handlerConfigChange(now.network.httpClients); - await this.handlerConfigChange(now.network.websocketServers); - await this.handlerConfigChange(now.network.websocketClients); - - await this.handleAddedAdapters(addedHttpServers, OB11PassiveHttpAdapter); - await this.handleAddedAdapters(addedHttpClients, OB11ActiveHttpAdapter); - await this.handleAddedAdapters(addedWebSocketServers, OB11PassiveWebSocketAdapter); - await this.handleAddedAdapters(addedWebSocketClients, OB11ActiveWebSocketAdapter); + + await this.handleConfigChange(now.network.httpServers, OB11PassiveHttpAdapter); + await this.handleConfigChange(now.network.httpClients, OB11ActiveHttpAdapter); + await this.handleConfigChange(now.network.websocketServers, OB11PassiveWebSocketAdapter); + await this.handleConfigChange(now.network.websocketClients, OB11ActiveWebSocketAdapter); } - - private async handlerConfigChange(adapters: Array) { + + private async handleConfigChange(adapters: NetworkConfigAdapter[], adapterClass: new (...args: any[]) => IOB11NetworkAdapter): Promise { for (const adapterConfig of adapters) { const existingAdapter = this.networkManager.findSomeAdapter(adapterConfig.name); if (existingAdapter) { const networkChange = await existingAdapter.reload(adapterConfig); if (networkChange === OB11NetworkReloadType.NetWorkClose) { - this.networkManager.closeSomeAdapters([existingAdapter]); - + await this.networkManager.closeSomeAdaterWhenOpen([existingAdapter]); } + } else { + const newAdapter = new adapterClass(adapterConfig.name, adapterConfig, this.core, this.actions); + await this.networkManager.registerAdapterAndOpen(newAdapter); } } } - private async handleRemovedAdapters(adapters: Array<{ name: string }>): Promise { - for (const adapter of adapters) { - await this.networkManager.closeAdapterByPredicate((existingAdapter) => existingAdapter.name === adapter.name); - } - } - - private async handleAddedAdapters IOB11NetworkAdapter>(addedAdapters: Array, AdapterClass: T) { - for (const adapter of addedAdapters) { - if (adapter.enable) { - const newAdapter = new AdapterClass(adapter.name, adapter, this.core, this.actions); - await newAdapter.open(); - this.networkManager.registerAdapter(newAdapter); - } - } - } - private findDifference(prev: T[], now: T[]): { added: T[]; removed: T[] } { - const added = now.filter((item) => !prev.includes(item)); - const removed = prev.filter((item) => !now.includes(item)); - return { added, removed }; - } - private initMsgListener() { const msgListener = new NodeIKernelMsgListener(); msgListener.onRecvSysMsg = (msg) => { diff --git a/src/onebot/network/index.ts b/src/onebot/network/index.ts index d7f46c59..5663f241 100644 --- a/src/onebot/network/index.ts +++ b/src/onebot/network/index.ts @@ -68,6 +68,14 @@ export class OB11NetworkManager { await adapter.close(); } } + async closeSomeAdaterWhenOpen(adaptersToClose: IOB11NetworkAdapter[]) { + for (const adapter of adaptersToClose) { + this.adapters.delete(adapter.name); + if(adapter.isEnable){ + await adapter.close(); + } + } + } findSomeAdapter(name: string) { return this.adapters.get(name); diff --git a/src/onebot/network/passive-websocket.ts b/src/onebot/network/passive-websocket.ts index cb7d89fe..80cb6201 100644 --- a/src/onebot/network/passive-websocket.ts +++ b/src/onebot/network/passive-websocket.ts @@ -31,13 +31,9 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter { ) { this.config = structuredClone(config); this.logger = core.context.logger; - if (this.config.host === '0.0.0.0') { - //兼容配置同时处理0.0.0.0逻辑 - this.config.host = ''; - } this.wsServer = new WebSocketServer({ port: this.config.port, - host: this.config.host, + host: this.config.host === '0.0.0.0' ? '' : this.config.host, maxPayload: 1024 * 1024 * 1024, }); this.wsServer.on('connection', async (wsClient, wsReq) => { @@ -202,11 +198,13 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter { this.open(); return OB11NetworkReloadType.NetWorkOpen; } else if (!newConfig.enable && wasEnabled) { + console.log(newConfig.enable, wasEnabled); this.close(); return OB11NetworkReloadType.NetWorkClose; } if (oldPort !== newConfig.port || oldHost !== newConfig.host) { + console.log(oldPort, newConfig.port, oldHost, newConfig.host); this.close(); this.wsServer = new WebSocketServer({ port: newConfig.port,