qq-official-bot
Version:
221 lines (220 loc) • 7.05 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReceiverManager = exports.ModernSessionManager = void 0;
exports.ReceiverDecorator = ReceiverDecorator;
const sessionManager_1 = require("../sessionManager");
const receiver_1 = require("../receiver");
/**
* 新版本的会话管理器,使用类继承的接收器架构
* 这个版本完全基于新的类继承结构
*/
class ModernSessionManager extends sessionManager_1.SessionManager {
constructor(bot) {
super(bot);
/**
* 创建现代化的接收器实例
*/
this.createModernReceiver = () => {
const config = this.getBot().config;
switch (config.mode) {
case 'websocket':
const wsConfig = receiver_1.ReceiverConfigBuilder.websocket({
heartbeatInterval: 45000,
maxRetries: 10,
reconnectDelay: 1000
});
return receiver_1.ReceiverFactory.createWebSocketReceiver(wsConfig);
case 'webhook':
const webhookConfig = receiver_1.ReceiverConfigBuilder.webhook({
port: config.port || 8080,
path: config.path || '/webhook',
timeout: 30000
});
return receiver_1.ReceiverFactory.createWebhookReceiver(webhookConfig);
case 'middleware':
const middlewareConfig = receiver_1.ReceiverConfigBuilder.middleware({
platform: config.application || 'express',
timeout: 30000
});
return receiver_1.ReceiverFactory.createMiddlewareReceiver(middlewareConfig);
default:
throw new Error(`Unsupported receiver mode: ${config.mode}`);
}
};
this.modernReceiver = this.createModernReceiver();
this.setupModernEventHandlers();
}
/**
* 设置现代化接收器的事件处理
*/
setupModernEventHandlers() {
// 数据包接收事件
this.modernReceiver.on('packet', (packet) => {
this.getBot().dispatchEvent(packet.t, packet);
});
// 接收器就绪事件
this.modernReceiver.on('ready', () => {
this.getBot().logger.info(`[ModernSessionManager] ${this.modernReceiver.getType()} receiver is ready`);
this.emit('ready');
});
// 接收器错误事件
this.modernReceiver.on('error', (error) => {
this.getBot().logger.error(`[ModernSessionManager] Receiver error:`, error);
this.emit('error', error);
});
// 接收器关闭事件
this.modernReceiver.on('close', (code, reason) => {
this.getBot().logger.warn(`[ModernSessionManager] Receiver closed: ${code} - ${reason}`);
this.emit('close', code, reason);
});
}
/**
* 启动现代化会话管理器
*/
async start() {
try {
this.getBot().logger.info('[ModernSessionManager] Starting modern session manager...');
// 启动接收器
await this.modernReceiver.start(this);
this.getBot().logger.info('[ModernSessionManager] Modern session manager started successfully');
}
catch (error) {
this.getBot().logger.error('[ModernSessionManager] Failed to start:', error);
throw error;
}
}
/**
* 停止现代化会话管理器
*/
async stop() {
try {
this.getBot().logger.info('[ModernSessionManager] Stopping modern session manager...');
// 停止接收器
await this.modernReceiver.stop(this);
this.getBot().logger.info('[ModernSessionManager] Modern session manager stopped successfully');
}
catch (error) {
this.getBot().logger.error('[ModernSessionManager] Failed to stop:', error);
throw error;
}
}
/**
* 重启现代化会话管理器
*/
async restart() {
await this.stop();
await this.start();
}
/**
* 获取接收器实例
*/
getModernReceiver() {
return this.modernReceiver;
}
/**
* 获取接收器健康状态
*/
getReceiverHealth() {
return this.modernReceiver.healthCheck();
}
/**
* 获取接收器配置信息
*/
getReceiverConfig() {
return this.modernReceiver.getConfig();
}
/**
* 获取中间件(仅适用于middleware模式)
*/
getMiddleware() {
if (this.modernReceiver instanceof receiver_1.MiddlewareReceiver) {
return this.modernReceiver.getMiddleware();
}
throw new Error('Middleware is only available in middleware mode');
}
}
exports.ModernSessionManager = ModernSessionManager;
/**
* 接收器管理器工具类
* 提供接收器的统一管理和监控功能
*/
class ReceiverManager {
constructor() {
this.receivers = new Map();
}
static getInstance() {
if (!ReceiverManager.instance) {
ReceiverManager.instance = new ReceiverManager();
}
return ReceiverManager.instance;
}
/**
* 注册接收器
*/
registerReceiver(id, receiver) {
if (this.receivers.has(id)) {
throw new Error(`Receiver with id ${id} already exists`);
}
this.receivers.set(id, receiver);
}
/**
* 获取接收器
*/
getReceiver(id) {
return this.receivers.get(id);
}
/**
* 移除接收器
*/
removeReceiver(id) {
return this.receivers.delete(id);
}
/**
* 获取所有接收器的健康状态
*/
getAllHealthStatus() {
const status = {};
for (const [id, receiver] of this.receivers) {
status[id] = receiver.healthCheck();
}
return status;
}
/**
* 获取所有接收器的配置信息
*/
getAllConfigs() {
const configs = {};
for (const [id, receiver] of this.receivers) {
configs[id] = receiver.getConfig();
}
return configs;
}
/**
* 停止所有接收器
*/
async stopAll() {
const promises = [];
for (const receiver of this.receivers.values()) {
promises.push(receiver.stop());
}
await Promise.all(promises);
}
/**
* 清空所有接收器
*/
clear() {
this.receivers.clear();
}
}
exports.ReceiverManager = ReceiverManager;
/**
* 接收器装饰器,用于自动注册接收器
*/
function ReceiverDecorator(id) {
return function (constructor) {
// 注册接收器到管理器
const instance = new constructor();
ReceiverManager.getInstance().registerReceiver(id, instance);
return constructor;
};
}