mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
93904dcb1b | ||
![]() |
86cbdf793a | ||
![]() |
56b1b9b598 | ||
![]() |
f7ec3ae131 | ||
![]() |
01d11d6213 | ||
![]() |
74a316e758 |
@@ -4,7 +4,7 @@
|
|||||||
"name": "NapCatQQ",
|
"name": "NapCatQQ",
|
||||||
"slug": "NapCat.Framework",
|
"slug": "NapCat.Framework",
|
||||||
"description": "高性能的 OneBot 11 协议实现",
|
"description": "高性能的 OneBot 11 协议实现",
|
||||||
"version": "4.1.18",
|
"version": "4.1.20",
|
||||||
"icon": "./logo.png",
|
"icon": "./logo.png",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
"name": "napcat",
|
"name": "napcat",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "4.1.18",
|
"version": "4.1.20",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:framework": "npm run build:webui && vite build --mode framework || exit 1",
|
"build:framework": "npm run build:webui && vite build --mode framework || exit 1",
|
||||||
"build:shell": "npm run build:webui && vite build --mode shell || exit 1",
|
"build:shell": "npm run build:webui && vite build --mode shell || exit 1",
|
||||||
|
@@ -1 +1 @@
|
|||||||
export const napCatVersion = '4.1.18';
|
export const napCatVersion = '4.1.20';
|
||||||
|
@@ -176,67 +176,48 @@ export class NapCatOneBot11Adapter {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private async reloadNetwork(prev: OneBotConfig, now: OneBotConfig) {
|
private async reloadNetwork(prev: OneBotConfig, now: OneBotConfig): Promise<void> {
|
||||||
const prevLog = await this.creatOneBotLog(prev);
|
const prevLog = await this.creatOneBotLog(prev);
|
||||||
const newLog = await this.creatOneBotLog(now);
|
const newLog = await this.creatOneBotLog(now);
|
||||||
this.context.logger.log(`[Notice] [OneBot11] 配置变更前:\n${prevLog}`);
|
this.context.logger.log(`[Notice] [OneBot11] 配置变更前:\n${prevLog}`);
|
||||||
this.context.logger.log(`[Notice] [OneBot11] 配置变更后:\n${newLog}`);
|
this.context.logger.log(`[Notice] [OneBot11] 配置变更后:\n${newLog}`);
|
||||||
|
|
||||||
const { added: addedHttpServers, removed: removedHttpServers } = this.findDifference(prev.network.httpServers, now.network.httpServers);
|
await this.handleConfigChange(prev.network.httpServers, now.network.httpServers, OB11PassiveHttpAdapter);
|
||||||
const { added: addedHttpClients, removed: removedHttpClients } = this.findDifference(prev.network.httpClients, now.network.httpClients);
|
await this.handleConfigChange(prev.network.httpClients, now.network.httpClients, OB11ActiveHttpAdapter);
|
||||||
const { added: addedWebSocketServers, removed: removedWebSocketServers } = this.findDifference(prev.network.websocketServers, now.network.websocketServers);
|
await this.handleConfigChange(prev.network.websocketServers, now.network.websocketServers, OB11PassiveWebSocketAdapter);
|
||||||
const { added: addedWebSocketClients, removed: removedWebSocketClients } = this.findDifference(prev.network.websocketClients, now.network.websocketClients);
|
await this.handleConfigChange(prev.network.websocketClients, now.network.websocketClients, OB11ActiveWebSocketAdapter);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async handlerConfigChange(adapters: Array<NetworkConfigAdapter>) {
|
private async handleConfigChange(
|
||||||
for (const adapterConfig of adapters) {
|
prevConfig: NetworkConfigAdapter[],
|
||||||
|
nowConfig: NetworkConfigAdapter[],
|
||||||
|
adapterClass: new (...args: any[]) => IOB11NetworkAdapter
|
||||||
|
): Promise<void> {
|
||||||
|
// 通知新配置重载 删除关闭的 加入新开的
|
||||||
|
for (const adapterConfig of nowConfig) {
|
||||||
const existingAdapter = this.networkManager.findSomeAdapter(adapterConfig.name);
|
const existingAdapter = this.networkManager.findSomeAdapter(adapterConfig.name);
|
||||||
if (existingAdapter) {
|
if (existingAdapter) {
|
||||||
const networkChange = await existingAdapter.reload(adapterConfig);
|
const networkChange = await existingAdapter.reload(adapterConfig);
|
||||||
if (networkChange === OB11NetworkReloadType.NetWorkClose) {
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 比较旧的找不到的回收
|
||||||
|
for (const adapterConfig of prevConfig) {
|
||||||
|
const existingAdapter = nowConfig.find((e) => e.name === adapterConfig.name);
|
||||||
|
if (!existingAdapter) {
|
||||||
|
const existingAdapter = this.networkManager.findSomeAdapter(adapterConfig.name);
|
||||||
|
if (existingAdapter) {
|
||||||
|
await this.networkManager.closeSomeAdaterWhenOpen([existingAdapter]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async handleRemovedAdapters(adapters: Array<{ name: string }>): Promise<void> {
|
|
||||||
for (const adapter of adapters) {
|
|
||||||
await this.networkManager.closeAdapterByPredicate((existingAdapter) => existingAdapter.name === adapter.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async handleAddedAdapters<T extends new (...args: any[]) => IOB11NetworkAdapter>(addedAdapters: Array<NetworkConfigAdapter>, 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<T>(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() {
|
private initMsgListener() {
|
||||||
const msgListener = new NodeIKernelMsgListener();
|
const msgListener = new NodeIKernelMsgListener();
|
||||||
msgListener.onRecvSysMsg = (msg) => {
|
msgListener.onRecvSysMsg = (msg) => {
|
||||||
|
@@ -68,6 +68,14 @@ export class OB11NetworkManager {
|
|||||||
await adapter.close();
|
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) {
|
findSomeAdapter(name: string) {
|
||||||
return this.adapters.get(name);
|
return this.adapters.get(name);
|
||||||
|
@@ -31,13 +31,9 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter {
|
|||||||
) {
|
) {
|
||||||
this.config = structuredClone(config);
|
this.config = structuredClone(config);
|
||||||
this.logger = core.context.logger;
|
this.logger = core.context.logger;
|
||||||
if (this.config.host === '0.0.0.0') {
|
|
||||||
//兼容配置同时处理0.0.0.0逻辑
|
|
||||||
this.config.host = '';
|
|
||||||
}
|
|
||||||
this.wsServer = new WebSocketServer({
|
this.wsServer = new WebSocketServer({
|
||||||
port: this.config.port,
|
port: this.config.port,
|
||||||
host: this.config.host,
|
host: this.config.host === '0.0.0.0' ? '' : this.config.host,
|
||||||
maxPayload: 1024 * 1024 * 1024,
|
maxPayload: 1024 * 1024 * 1024,
|
||||||
});
|
});
|
||||||
this.wsServer.on('connection', async (wsClient, wsReq) => {
|
this.wsServer.on('connection', async (wsClient, wsReq) => {
|
||||||
|
Reference in New Issue
Block a user