fix: Socket.IO连接超时和日志刷屏修复
- NetworkManager重写为两阶段连接策略:Phase1快速10秒轮询 + Phase2后台监控(最长2分钟) - Phase2与Socket.IO内置重连机制协作而非对抗,超时后触发forceReconnect - 所有魔法数字提取为companion object常量 - ScreenCaptureManager: Socket.IO不可用日志降频(首次+每50次打印) - 连接恢复时打印跳过帧数统计 - MainActivity: 清理残留emoji符号
This commit is contained in:
@@ -1847,30 +1847,44 @@ class ScreenCaptureManager(private val service: AccessibilityRemoteService) {
|
||||
}
|
||||
}
|
||||
|
||||
// Socket unavailable log throttle counter
|
||||
private var socketUnavailableLogCount = 0
|
||||
|
||||
/**
|
||||
* 处理单帧数据
|
||||
* Process single frame data.
|
||||
* Throttles "socket unavailable" log to avoid flooding logcat
|
||||
* when connection is down but capture is still running.
|
||||
*/
|
||||
private suspend fun processFrameData(frameData: ByteArray) {
|
||||
try {
|
||||
var success = false
|
||||
|
||||
// 优先使用Socket.IO v4官方客户端发送屏幕数据
|
||||
|
||||
val socketIOManager = service.getSocketIOManager()
|
||||
if (socketIOManager != null && socketIOManager.isConnected()) {
|
||||
socketIOManager.sendScreenData(frameData)
|
||||
Log.v(TAG, "Socket.IO v4发送帧数据: ${frameData.size} bytes")
|
||||
Log.v(TAG, "Socket.IO sent frame: ${frameData.size} bytes")
|
||||
success = true
|
||||
// Reset throttle counter on success
|
||||
if (socketUnavailableLogCount > 0) {
|
||||
Log.i(TAG, "Socket.IO connection restored, " +
|
||||
"skipped $socketUnavailableLogCount frames while disconnected")
|
||||
socketUnavailableLogCount = 0
|
||||
}
|
||||
} else {
|
||||
Log.w(TAG, "Socket.IO连接不可用,无法发送屏幕数据")
|
||||
socketUnavailableLogCount++
|
||||
// Log first occurrence, then every 50th to avoid flooding
|
||||
if (socketUnavailableLogCount == 1 || socketUnavailableLogCount % 50 == 0) {
|
||||
Log.w(TAG, "Socket.IO unavailable, cannot send screen data " +
|
||||
"(count=$socketUnavailableLogCount)")
|
||||
}
|
||||
}
|
||||
|
||||
// 记录成功发送时间
|
||||
|
||||
if (success) {
|
||||
lastSuccessfulSendTime = System.currentTimeMillis()
|
||||
}
|
||||
|
||||
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "处理帧数据失败", e)
|
||||
Log.e(TAG, "Process frame data failed", e)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user