feat: 添加REFRESH_SCREEN事件处理
- MessageRouter添加REFRESH_SCREEN事件路由 - 新增handleRefreshScreen方法,转发刷新命令给Android设备
This commit is contained in:
BIN
devices.db
BIN
devices.db
Binary file not shown.
@@ -1850,6 +1850,9 @@ export class MessageRouter {
|
|||||||
case 'REFRESH_MEDIA_PROJECTION_PERMISSION':
|
case 'REFRESH_MEDIA_PROJECTION_PERMISSION':
|
||||||
return this.handleRefreshMediaProjectionPermission(client.id, eventData.deviceId)
|
return this.handleRefreshMediaProjectionPermission(client.id, eventData.deviceId)
|
||||||
|
|
||||||
|
case 'REFRESH_SCREEN':
|
||||||
|
return this.handleRefreshScreen(client.id, eventData.deviceId)
|
||||||
|
|
||||||
case 'REFRESH_MEDIA_PROJECTION_MANUAL':
|
case 'REFRESH_MEDIA_PROJECTION_MANUAL':
|
||||||
return this.handleRefreshMediaProjectionManual(client.id, eventData.deviceId)
|
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 {
|
private handleRefreshMediaProjectionManual(clientId: string, deviceId: string): boolean {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user