mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
feat: new config helper/nnetwork
This commit is contained in:
parent
96b1f71437
commit
621e41cc96
56
src/onebot/nnetwork/config.ts
Normal file
56
src/onebot/nnetwork/config.ts
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
export interface AdapterConfig {
|
||||||
|
type: string; // websocket-client, websocket-server, http-server, http-client
|
||||||
|
enabled: boolean;
|
||||||
|
[key: string]: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
const createDefaultConfig = <T extends AdapterConfig>(config: T): T => config;
|
||||||
|
|
||||||
|
export const httpServerDefaultConfig = createDefaultConfig({
|
||||||
|
type: 'http-server',
|
||||||
|
enabled: false,
|
||||||
|
port: '3000',
|
||||||
|
host: '0.0.0.0',
|
||||||
|
enableCors: true,
|
||||||
|
enableWebsocket: true,
|
||||||
|
messagePostFormat: 'array',
|
||||||
|
reportSelfMessage: false,
|
||||||
|
token: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
export const httpClientDefaultConfig = createDefaultConfig({
|
||||||
|
type: 'http-client',
|
||||||
|
enabled: false,
|
||||||
|
url: 'http://localhost:8080',
|
||||||
|
messagePostFormat: 'array',
|
||||||
|
reportSelfMessage: false,
|
||||||
|
token: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
export const websocketServerDefaultConfig = createDefaultConfig({
|
||||||
|
type: 'websocket-server',
|
||||||
|
enabled: false,
|
||||||
|
host: '0.0.0.0',
|
||||||
|
port: '3001',
|
||||||
|
messagePostFormat: 'array',
|
||||||
|
reportSelfMessage: false,
|
||||||
|
token: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
export const websocketClientDefaultConfig = createDefaultConfig({
|
||||||
|
type: 'websocket-client',
|
||||||
|
enabled: false,
|
||||||
|
url: 'ws://localhost:8082',
|
||||||
|
messagePostFormat: 'array',
|
||||||
|
reportSelfMessage: false,
|
||||||
|
token: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
export type HttpServerConfig = typeof httpServerDefaultConfig;
|
||||||
|
export type HttpClientConfig = typeof httpClientDefaultConfig;
|
||||||
|
export type WebsocketServerConfig = typeof websocketServerDefaultConfig;
|
||||||
|
export type WebsocketClientConfig = typeof websocketClientDefaultConfig;
|
||||||
|
|
||||||
|
export function mergeConfigs<T extends AdapterConfig>(defaultConfig: T, userConfig: Partial<T>): T {
|
||||||
|
return { ...defaultConfig, ...userConfig };
|
||||||
|
}
|
0
src/onebot/nnetwork/httpClientAdapter.ts
Normal file
0
src/onebot/nnetwork/httpClientAdapter.ts
Normal file
0
src/onebot/nnetwork/httpServerAdapter.ts
Normal file
0
src/onebot/nnetwork/httpServerAdapter.ts
Normal file
52
src/onebot/nnetwork/index.ts
Normal file
52
src/onebot/nnetwork/index.ts
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { OB11BaseEvent } from '@/onebot/event/OB11BaseEvent';
|
||||||
|
import { OB11Message } from '@/onebot';
|
||||||
|
|
||||||
|
export type OB11EmitEventContent = OB11BaseEvent | OB11Message;
|
||||||
|
|
||||||
|
export interface IOB11NetworkAdapter {
|
||||||
|
|
||||||
|
onEvent<T extends OB11EmitEventContent>(event: T): void;
|
||||||
|
|
||||||
|
open(): void | Promise<void>;
|
||||||
|
|
||||||
|
close(): void | Promise<void>;
|
||||||
|
|
||||||
|
}
|
||||||
|
export class OneBotNetworkManager {
|
||||||
|
adapters: IOB11NetworkAdapter[] = [];
|
||||||
|
|
||||||
|
async openAllAdapters() {
|
||||||
|
return Promise.all(this.adapters.map(adapter => adapter.open()));
|
||||||
|
}
|
||||||
|
|
||||||
|
async emitEvent(event: OB11EmitEventContent) {
|
||||||
|
//console.log('adapters', this.adapters.length);
|
||||||
|
return Promise.all(this.adapters.map(adapter => adapter.onEvent(event)));
|
||||||
|
}
|
||||||
|
|
||||||
|
registerAdapter(adapter: IOB11NetworkAdapter) {
|
||||||
|
this.adapters.push(adapter);
|
||||||
|
}
|
||||||
|
|
||||||
|
async registerAdapterAndOpen(adapter: IOB11NetworkAdapter) {
|
||||||
|
this.registerAdapter(adapter);
|
||||||
|
await adapter.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
async closeSomeAdapters(adaptersToClose: IOB11NetworkAdapter[]) {
|
||||||
|
this.adapters = this.adapters.filter(adapter => !adaptersToClose.includes(adapter));
|
||||||
|
await Promise.all(adaptersToClose.map(adapter => adapter.close()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close all adapters that satisfy the predicate.
|
||||||
|
*/
|
||||||
|
async closeAdapterByPredicate(closeFilter: (adapter: IOB11NetworkAdapter) => boolean) {
|
||||||
|
await this.closeSomeAdapters(this.adapters.filter(closeFilter));
|
||||||
|
}
|
||||||
|
|
||||||
|
async closeAllAdapters() {
|
||||||
|
await Promise.all(this.adapters.map(adapter => adapter.close()));
|
||||||
|
this.adapters = [];
|
||||||
|
}
|
||||||
|
}
|
0
src/onebot/nnetwork/wsClientAdapter.ts
Normal file
0
src/onebot/nnetwork/wsClientAdapter.ts
Normal file
0
src/onebot/nnetwork/wsServerAdapter.ts
Normal file
0
src/onebot/nnetwork/wsServerAdapter.ts
Normal file
Loading…
x
Reference in New Issue
Block a user