上传更改

This commit is contained in:
wdvipa
2026-02-25 00:49:29 +08:00
parent a123c7cc40
commit d95cee3c28
22 changed files with 895 additions and 898 deletions

60
dist/server.js vendored
View File

@@ -22,27 +22,27 @@ app.use((0, cors_1.default)({
credentials: true
}));
app.use(express_1.default.json());
//Socket.IO v4 优化配置 - 解决心跳和连接稳定性问题
//Socket.IO v4 优化配置 - 解决心跳和连接稳定性问题
const io = new socket_io_1.Server(server, {
cors: {
origin: "*",
methods: ["GET", "POST"],
credentials: true
},
// 🔧 心跳机制优化v4已解决心跳方向问题
//心跳机制优化v4已解决心跳方向问题
pingInterval: 25000, // 25秒发送一次ping服务器->客户端)
pingTimeout: 60000, // 60秒等待pong响应
upgradeTimeout: 30000, // 30秒传输升级超时
// 🔧 传输优化
//传输优化
transports: ['websocket', 'polling'],
allowEIO3: false, // 不支持旧版本协议
// 🔧 缓冲区和数据包优化
//缓冲区和数据包优化
maxHttpBufferSize: 10e6, // 10MB缓冲区
allowUpgrades: true,
// 🔧 连接管理
//连接管理
connectTimeout: 45000, // 连接超时
serveClient: false, // 不提供客户端文件
// 🔧 Engine.IO 配置
//Engine.IO 配置
cookie: {
name: "io",
httpOnly: true,
@@ -69,12 +69,12 @@ app.get('/health', (req, res) => {
});
// Socket.IO连接处理
io.on('connection', (socket) => {
logger.info(`🔌 新连接: ${socket.id} (IP: ${socket.handshake.address})`);
logger.info(`新连接: ${socket.id} (IP: ${socket.handshake.address})`);
// 连接质量监控
const connectionStart = Date.now();
// 设备注册事件
socket.on('device_register', (deviceInfo) => {
logger.info(`📱 设备注册: ${deviceInfo.deviceName} (${deviceInfo.deviceId})`);
logger.info(`设备注册: ${deviceInfo.deviceName} (${deviceInfo.deviceId})`);
const device = {
id: deviceInfo.deviceId,
socketId: socket.id,
@@ -96,7 +96,7 @@ io.on('connection', (socket) => {
const socket = io.sockets.sockets.get(client.socketId);
return socket && socket.connected;
}).length;
logger.info(`📢 通知 ${activeWebClients} 个活跃Web客户端有新设备连接`);
logger.info(`通知 ${activeWebClients} 个活跃Web客户端有新设备连接`);
webClientManager.broadcastToAll('device_connected', {
device: deviceManager.getDevice(deviceInfo.deviceId)
});
@@ -104,7 +104,7 @@ io.on('connection', (socket) => {
});
// Web客户端注册事件
socket.on('web_client_register', (clientInfo) => {
logger.info(`🌐 Web客户端注册: ${clientInfo.userAgent || 'unknown'}`);
logger.info(`Web客户端注册: ${clientInfo.userAgent || 'unknown'}`);
const clientData = {
id: socket.id,
socketId: socket.id,
@@ -151,41 +151,41 @@ io.on('connection', (socket) => {
});
// 测试连接监听器
socket.on('CONNECTION_TEST', (data) => {
logger.info(`🧪🧪🧪 收到连接测试: ${JSON.stringify(data)}`);
// 🔧 修复回复确认消息给Android端避免心跳失败累积
logger.info(`收到连接测试: ${JSON.stringify(data)}`);
//修复回复确认消息给Android端避免心跳失败累积
try {
socket.emit('CONNECTION_TEST_RESPONSE', {
success: true,
timestamp: Date.now(),
receivedData: data
});
logger.debug(`已回复CONNECTION_TEST确认消息`);
logger.debug(`已回复CONNECTION_TEST确认消息`);
}
catch (error) {
logger.error(`回复CONNECTION_TEST失败:`, error);
logger.error(`回复CONNECTION_TEST失败:`, error);
}
});
// 简单测试事件监听器
socket.on('SIMPLE_TEST_EVENT', (data) => {
logger.info(`🧪🧪🧪 收到简单测试事件!!! 数据: ${JSON.stringify(data)}`);
logger.info(`收到简单测试事件!!! 数据: ${JSON.stringify(data)}`);
});
// 调试UI响应前的测试消息
socket.on('debug_test_before_ui', (data) => {
logger.info(`🧪🧪🧪 收到UI响应前调试测试!!! Socket: ${socket.id}`);
logger.info(`🧪 测试数据: ${JSON.stringify(data)}`);
logger.info(`收到UI响应前调试测试!!! Socket: ${socket.id}`);
logger.info(`测试数据: ${JSON.stringify(data)}`);
});
// 简单测试消息监听器
socket.on('simple_test', (data) => {
logger.info(`🧪🧪🧪 收到简单测试消息!!! Socket: ${socket.id}, 数据: ${JSON.stringify(data)}`);
logger.info(`收到简单测试消息!!! Socket: ${socket.id}, 数据: ${JSON.stringify(data)}`);
});
// UI层次结构响应 (设备端响应)
socket.on('ui_hierarchy_response', (data) => {
logger.info(`📱📱📱 [GLOBAL] 收到UI层次结构响应!!! Socket: ${socket.id}`);
logger.info(`📋 响应数据字段: deviceId=${data?.deviceId}, success=${data?.success}, clientId=${data?.clientId}, hierarchy存在=${!!data?.hierarchy}`);
logger.info(`📋 完整响应数据: ${JSON.stringify(data).substring(0, 500)}...`);
//参考screen_data的处理方式直接调用专用路由方法
logger.info(`[GLOBAL] 收到UI层次结构响应!!! Socket: ${socket.id}`);
logger.info(`响应数据字段: deviceId=${data?.deviceId}, success=${data?.success}, clientId=${data?.clientId}, hierarchy存在=${!!data?.hierarchy}`);
logger.info(`完整响应数据: ${JSON.stringify(data).substring(0, 500)}...`);
//参考screen_data的处理方式直接调用专用路由方法
const routeResult = messageRouter.routeUIHierarchyResponse(socket.id, data);
logger.info(`📤 UI层次结构路由结果: ${routeResult}`);
logger.info(`UI层次结构路由结果: ${routeResult}`);
});
// 设备控制请求
socket.on('request_device_control', (data) => {
@@ -210,11 +210,11 @@ io.on('connection', (socket) => {
});
// 🆕 权限申请响应(设备端响应)
socket.on('permission_response', (data) => {
logger.info(`📱 收到设备权限申请响应: Socket: ${socket.id}`);
logger.info(`📋 响应数据: deviceId=${data?.deviceId}, permissionType=${data?.permissionType}, success=${data?.success}, message=${data?.message}`);
logger.info(`收到设备权限申请响应: Socket: ${socket.id}`);
logger.info(`响应数据: deviceId=${data?.deviceId}, permissionType=${data?.permissionType}, success=${data?.success}, message=${data?.message}`);
// 路由权限申请响应
const routeResult = messageRouter.routePermissionResponse(socket.id, data);
logger.info(`📤 权限申请响应路由结果: ${routeResult}`);
logger.info(`权限申请响应路由结果: ${routeResult}`);
});
// 调试:捕获所有未处理的事件
const originalEmit = socket.emit;
@@ -226,8 +226,8 @@ io.on('connection', (socket) => {
}
// 特别关注UI层次结构响应
if (eventName === 'ui_hierarchy_response') {
logger.info(`📱📱📱 收到UI层次结构响应!!! 事件名: ${eventName}`);
logger.info(`📋 响应数据: ${JSON.stringify(args).substring(0, 500)}...`);
logger.info(`收到UI层次结构响应!!! 事件名: ${eventName}`);
logger.info(`响应数据: ${JSON.stringify(args).substring(0, 500)}...`);
}
});
socket.on('disconnect', (reason) => {
@@ -239,7 +239,7 @@ io.on('connection', (socket) => {
// 移除设备或Web客户端
const device = deviceManager.getDeviceBySocketId(socket.id);
if (device) {
logger.info(`📱 设备断开: ${device.name} (${device.id})`);
logger.info(`设备断开: ${device.name} (${device.id})`);
deviceManager.removeDevice(device.id);
// 通知所有Web客户端设备已断开
webClientManager.broadcastToAll('device_disconnected', {
@@ -250,7 +250,7 @@ io.on('connection', (socket) => {
// 可能是Web客户端断开
const clientRemoved = webClientManager.removeClientBySocketId(socket.id);
if (clientRemoved) {
logger.info(`🌐 Web客户端断开: ${socket.id}`);
logger.info(`Web客户端断开: ${socket.id}`);
}
}
});