UNPKG

qq-official-bot

Version:
221 lines (220 loc) 7.05 kB
"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; }; }