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) } })