fix(scale): 修复子设备IP收到数据后仍显示"未知"的问题
setDeviceIp 新增缓存回填逻辑:若设备已有缓存数据且 ip 为空, 立即用新 IP 更新所有相关条目并触发 StateFlow, 解决早期数据包在 IP 到达前入缓存导致 UI 无法更新的时序问题 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -34,11 +34,29 @@ class ScaleDataAggregator(private val localDeviceId: String) {
|
||||
|
||||
/**
|
||||
* 设置指定设备的 IP 地址
|
||||
* 若缓存中已有该设备的数据且 ip 为空,立即回填并触发 StateFlow 更新,
|
||||
* 解决早期数据包在 IP 到达前入缓存导致一直显示"未知"的问题
|
||||
* @param deviceId 设备 ID
|
||||
* @param ip IP 地址字符串
|
||||
*/
|
||||
fun setDeviceIp(deviceId: String, ip: String) {
|
||||
if (ip.isEmpty()) return
|
||||
deviceIpMap[deviceId] = ip
|
||||
// 回填该设备所有 ip 为空的缓存条目
|
||||
val keys = cache.keys.filter { it.startsWith("$deviceId#") }
|
||||
if (keys.isEmpty()) return
|
||||
var updated = false
|
||||
keys.forEach { key ->
|
||||
val old = cache[key] ?: return@forEach
|
||||
if (old.ip.isEmpty()) {
|
||||
cache[key] = old.copy(ip = ip)
|
||||
updated = true
|
||||
}
|
||||
}
|
||||
if (updated) {
|
||||
_allScales.value = HashMap(cache)
|
||||
Log.d(TAG, "已回填设备IP: $deviceId -> $ip, 共 ${keys.size} 条")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user