feat: new config helper/nnetwork

This commit is contained in:
手瓜一十雪 2024-11-14 17:00:34 +08:00
parent 96b1f71437
commit 621e41cc96
6 changed files with 108 additions and 0 deletions

View 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 };
}

View File

View File

View 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 = [];
}
}

View File

View File