From 94e49eb344425d12f60737ee8edf2d28e80dc137 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Tue, 14 Apr 2026 18:25:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(scale):=20=E4=BF=AE=E5=A4=8D=20mDNS=20?= =?UTF-8?q?=E6=8A=96=E5=8A=A8=E5=AF=BC=E8=87=B4=E5=AD=90=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E6=B0=B8=E4=B9=85=E6=97=A0=E6=B3=95=E9=87=8D=E8=BF=9E=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/shuwei/dish/match/scale/ScaleServiceManager.kt | 8 ++++---- .../com/shuwei/dish/match/scale/ScaleWebSocketClient.kt | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/shuwei/dish/match/scale/ScaleServiceManager.kt b/app/src/main/java/com/shuwei/dish/match/scale/ScaleServiceManager.kt index 6eb65fe..9d65b23 100644 --- a/app/src/main/java/com/shuwei/dish/match/scale/ScaleServiceManager.kt +++ b/app/src/main/java/com/shuwei/dish/match/scale/ScaleServiceManager.kt @@ -111,16 +111,16 @@ object ScaleServiceManager { client.connect(remoteId, host, port) } - // mDNS 发现:发现子设备 → 建立 WebSocket 连接;设备离线 → 断开连接并清除数据 + // mDNS 发现:发现子设备 → 建立 WebSocket 连接;设备离线 → 仅清除 UDP 缓存,WebSocket 层自行重连 mdnsDiscovery = MdnsDiscoveryManager(context).also { discovery -> discovery.onDeviceFound = { remoteId, host, port -> onDeviceFound(remoteId, host, port) } discovery.onDeviceLost = { remoteId -> - Log.d(TAG, "子设备离线 $remoteId, 断开连接并清除数据") - client.disconnect(remoteId) - aggregator?.removeDevice(remoteId) + // mDNS 抖动不永久断开,WebSocket 层会持续重连直到网络恢复 + // 仅清除 UDP 缓存,确保 UDP 重新发现时能再次触发 onDeviceFound udpReceiver?.removeDevice(remoteId) + Log.d(TAG, "子设备 mDNS 离线: $remoteId, 保持 WebSocket 重连") } discovery.startDiscovery() } diff --git a/app/src/main/java/com/shuwei/dish/match/scale/ScaleWebSocketClient.kt b/app/src/main/java/com/shuwei/dish/match/scale/ScaleWebSocketClient.kt index 89eed4a..109f185 100644 --- a/app/src/main/java/com/shuwei/dish/match/scale/ScaleWebSocketClient.kt +++ b/app/src/main/java/com/shuwei/dish/match/scale/ScaleWebSocketClient.kt @@ -100,10 +100,10 @@ class ScaleWebSocketClient { /** * 指数退避重连 + * 入口不拦截 removedDevices,仅在延迟任务执行前检查, + * 确保 disconnect() 后已入队的任务不执行,但新断线事件始终能进入重连流程 */ private fun scheduleReconnect(deviceId: String, host: String, port: Int) { - if (removedDevices.contains(deviceId)) return - val delay = reconnectDelays[deviceId] ?: RECONNECT_BASE_MS Log.d(TAG, "将在 ${delay}ms 后重连子设备: $deviceId")