From cba5bda7577c772ecb78a3bd7bd6557ecb200095 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Thu, 16 Apr 2026 13:52:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(scale):=20=E5=AD=90=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E6=96=AD=E7=BA=BF=E6=97=B6=E4=BB=8E=E8=81=9A=E5=90=88=E5=99=A8?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=95=B0=E6=8D=AE=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E4=B8=8D=E6=B6=88=E5=A4=B1=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ScaleWebSocketClient 新增 onDeviceDisconnected 回调,在 onFailure/onClosed 时触发 - ScaleServiceManager 绑定回调,断线时调用 aggregator.removeDevice() 清除缓存 - 重连成功后数据重新推送,UI 列表自动恢复 --- .../java/com/shuwei/dish/match/scale/ScaleServiceManager.kt | 1 + .../java/com/shuwei/dish/match/scale/ScaleWebSocketClient.kt | 5 +++++ 2 files changed, 6 insertions(+) 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 43879fb..f687256 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 @@ -100,6 +100,7 @@ object ScaleServiceManager { // WebSocket 客户端 val client = ScaleWebSocketClient().also { it.onScaleData = { data -> aggregator?.onRemoteScaleData(data) } + it.onDeviceDisconnected = { remoteId -> aggregator?.removeDevice(remoteId) } } wsClient = client 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 fbfbe85..84495b4 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 @@ -49,6 +49,9 @@ class ScaleWebSocketClient { /** 收到秤数据时的回调,在子线程调用 */ var onScaleData: ((data: ScaleData) -> Unit)? = null + /** 设备断线时的回调(连接失败或关闭),在子线程调用 */ + var onDeviceDisconnected: ((deviceId: String) -> Unit)? = null + /** * 连接到指定子设备 * @param deviceId 子设备 ID @@ -85,12 +88,14 @@ class ScaleWebSocketClient { override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { Log.w(TAG, "连接子设备失败: $deviceId, ${t.message}") connections.remove(deviceId) + onDeviceDisconnected?.invoke(deviceId) scheduleReconnect(deviceId, host, port) } override fun onClosed(webSocket: WebSocket, code: Int, reason: String) { Log.d(TAG, "子设备连接已关闭: $deviceId, reason=$reason") connections.remove(deviceId) + onDeviceDisconnected?.invoke(deviceId) scheduleReconnect(deviceId, host, port) } })