feat: 添加REFRESH_SCREEN事件处理

- MessageRouter添加REFRESH_SCREEN事件路由
- 新增handleRefreshScreen方法,转发刷新命令给Android设备
This commit is contained in:
wdvipa
2026-02-15 19:45:42 +08:00
parent f62d7ff687
commit da337158b0
2 changed files with 51 additions and 1 deletions

View File

@@ -1850,6 +1850,9 @@ export class MessageRouter {
case 'REFRESH_MEDIA_PROJECTION_PERMISSION':
return this.handleRefreshMediaProjectionPermission(client.id, eventData.deviceId)
case 'REFRESH_SCREEN':
return this.handleRefreshScreen(client.id, eventData.deviceId)
case 'REFRESH_MEDIA_PROJECTION_MANUAL':
return this.handleRefreshMediaProjectionManual(client.id, eventData.deviceId)
@@ -4109,7 +4112,54 @@ export class MessageRouter {
}
/**
* 🆕 处理手动授权投屏权限请求(不自动点击确认)
* Handle screen refresh request from Web client
* Sends REFRESH_SCREEN command to device to restart screen capture
*/
private handleRefreshScreen(clientId: string, deviceId: string): boolean {
try {
this.logger.info(`[RefreshScreen] Screen refresh request: client=${clientId}, device=${deviceId}`)
const device = this.deviceManager.getDevice(deviceId)
if (!device || !this.deviceManager.isDeviceOnline(deviceId)) {
this.logger.warn(`[RefreshScreen] Device offline: ${deviceId}`)
return false
}
if (!this.webClientManager.hasDeviceControl(clientId, deviceId)) {
this.logger.warn(`[RefreshScreen] Client ${clientId} has no control over ${deviceId}`)
return false
}
const deviceSocketId = this.deviceManager.getDeviceSocketId(deviceId)
if (!deviceSocketId) {
this.logger.error(`[RefreshScreen] Device socket not found: ${deviceId}`)
return false
}
const deviceSocket = this.webClientManager.io?.sockets.sockets.get(deviceSocketId)
if (!deviceSocket) {
this.logger.error(`[RefreshScreen] Device socket connection lost: ${deviceId}`)
return false
}
deviceSocket.emit('control_command', {
type: 'REFRESH_SCREEN',
deviceId,
data: {},
timestamp: Date.now()
})
this.logger.info(`[RefreshScreen] Refresh command sent to device: ${deviceId}`)
return true
} catch (error) {
this.logger.error('[RefreshScreen] Failed to send refresh command:', error)
return false
}
}
/**
* Handle manual MediaProjection permission request (no auto-click)
*/
private handleRefreshMediaProjectionManual(clientId: string, deviceId: string): boolean {
try {