"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Logger_1 = __importDefault(require("../utils/Logger")); /** * 设备管理器 */ class DeviceManager { constructor() { this.devices = new Map(); this.deviceStatuses = new Map(); this.socketToDevice = new Map(); this.logger = new Logger_1.default('DeviceManager'); } /** * ✅ 清理所有设备记录(服务器重启时调用) */ clearAllDevices() { const deviceCount = this.devices.size; this.devices.clear(); this.deviceStatuses.clear(); this.socketToDevice.clear(); this.logger.info(`🧹 已清理所有设备记录: ${deviceCount} 个设备`); } /** * 添加设备 */ addDevice(deviceInfo) { this.devices.set(deviceInfo.id, deviceInfo); this.socketToDevice.set(deviceInfo.socketId, deviceInfo.id); this.logger.info(`设备已添加: ${deviceInfo.name} (${deviceInfo.id})`); } /** * 移除设备 */ removeDevice(deviceId) { const device = this.devices.get(deviceId); if (device) { this.devices.delete(deviceId); this.deviceStatuses.delete(deviceId); this.socketToDevice.delete(device.socketId); this.logger.info(`设备已移除: ${device.name} (${deviceId})`); return true; } return false; } /** * 通过Socket ID移除设备 */ removeDeviceBySocketId(socketId) { const deviceId = this.socketToDevice.get(socketId); if (deviceId) { return this.removeDevice(deviceId); } return false; } /** * 获取设备信息 */ getDevice(deviceId) { return this.devices.get(deviceId); } /** * 通过Socket ID获取设备 */ getDeviceBySocketId(socketId) { const deviceId = this.socketToDevice.get(socketId); return deviceId ? this.devices.get(deviceId) : undefined; } /** * 获取所有设备 */ getAllDevices() { return Array.from(this.devices.values()); } /** * 获取在线设备 */ getOnlineDevices() { return Array.from(this.devices.values()).filter(device => device.status === 'online'); } /** * 获取设备数量 */ getDeviceCount() { return this.devices.size; } /** * 更新设备状态 */ updateDeviceStatus(socketId, status) { const deviceId = this.socketToDevice.get(socketId); if (deviceId) { const device = this.devices.get(deviceId); if (device) { device.lastSeen = new Date(); this.deviceStatuses.set(deviceId, status); this.logger.debug(`设备状态已更新: ${deviceId}`, status); } } } /** * 获取设备状态 */ getDeviceStatus(deviceId) { return this.deviceStatuses.get(deviceId); } /** * 更新设备连接状态 */ updateDeviceConnectionStatus(deviceId, status) { const device = this.devices.get(deviceId); if (device) { device.status = status; device.lastSeen = new Date(); this.logger.info(`设备连接状态已更新: ${deviceId} -> ${status}`); } } /** * 检查设备是否在线 */ isDeviceOnline(deviceId) { const device = this.devices.get(deviceId); return device ? device.status === 'online' : false; } /** * 获取设备的Socket ID */ getDeviceSocketId(deviceId) { const device = this.devices.get(deviceId); return device?.socketId; } /** * 清理离线设备 (超过指定时间未活跃) */ cleanupOfflineDevices(timeoutMs = 300000) { const now = Date.now(); const devicesToRemove = []; for (const [deviceId, device] of this.devices.entries()) { if (now - device.lastSeen.getTime() > timeoutMs) { devicesToRemove.push(deviceId); } } devicesToRemove.forEach(deviceId => { this.removeDevice(deviceId); }); if (devicesToRemove.length > 0) { this.logger.info(`已清理 ${devicesToRemove.length} 个离线设备`); } } /** * 获取设备统计信息 */ getDeviceStats() { const devices = Array.from(this.devices.values()); return { total: devices.length, online: devices.filter(d => d.status === 'online').length, offline: devices.filter(d => d.status === 'offline').length, busy: devices.filter(d => d.status === 'busy').length, }; } } exports.default = DeviceManager; //# sourceMappingURL=DeviceManager.js.map