111
This commit is contained in:
167
dist/managers/DeviceManager.js
vendored
Normal file
167
dist/managers/DeviceManager.js
vendored
Normal file
@@ -0,0 +1,167 @@
|
||||
"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
|
||||
Reference in New Issue
Block a user