添加未信任状态,优化goios启动逻辑。 此版本为稳定版。

This commit is contained in:
2025-11-27 14:35:58 +08:00
parent 648f6cdfee
commit 68b985115e
2 changed files with 83 additions and 39 deletions

View File

@@ -69,33 +69,53 @@ class DeviceInfo:
LogManager.method_info("进入主循环", "listen", udid="system")
print("[Listen] 开始监听设备上下线...")
last_broadcast = 0.0 # 用来做“心跳全量同步”的时间戳
while True:
try:
usb = Usbmux().device_list()
# 只看 USB 连接的设备
online = {d.udid for d in usb if d.conn_type == ConnectionType.USB}
except Exception as e:
LogManager.warning(f"[device_list] 异常:{e}", udid="system")
print("[Listen] device_list 出错,本轮视为无设备,防止状态脏死")
usb = []
online = set()
time.sleep(1)
continue
now = time.time()
# 当前已知的设备(本轮循环开始时)
with self._lock:
known = set(self._models.keys())
# ---------- 1. 新设备 ----------
now = time.time()
# 1. 处理在线设备
for udid in online:
# 更新心跳时间
self._last_seen[udid] = now
if udid not in known:
try:
self._add_device(udid)
except Exception as e:
LogManager.warning(f"[Add] 处理设备 {udid} 异常: {e}", udid=udid)
print(f"[Add] 处理设备 {udid} 异常: {e}")
# ---------- 2. 可能离线设备 ----------
# 已经在列表里的设备,直接跳过“是否信任”检查
if udid in known:
continue
# 只对“新发现”的设备做一次信任检查
try:
if not self._is_trusted(udid):
# 未信任 / 未配对 / 暂时不可用,本轮直接跳过
LogManager.info(f"[Add] 设备未信任或未就绪,跳过本轮添加: {udid}", udid=udid)
print(f"[Add] 设备未信任或未就绪,跳过: {udid}")
continue
except Exception as e:
# 信任检查本身异常,也当作暂时未就绪处理
LogManager.warning(f"[Add] 检测设备 {udid} 信任状态异常: {e}", udid=udid)
print(f"[Add] 检测设备 {udid} 信任状态异常: {e}")
continue
# 确认“已信任”的新设备,才真正走 _add_device
try:
self._add_device(udid)
except Exception as e:
# 单设备异常不能干掉整个循环
LogManager.warning(f"[Add] 处理设备 {udid} 异常: {e}", udid=udid)
print(f"[Add] 处理设备 {udid} 异常: {e}")
# 2. 处理可能离线的设备(只看本轮开始时 known 里的)
for udid in list(known):
if udid not in online:
last = self._last_seen.get(udid, 0)
@@ -106,17 +126,26 @@ class DeviceInfo:
LogManager.method_error(f"移除失败:{e}", "listen", udid=udid)
print(f"[Remove] 移除失败 {udid}: {e}")
# ---------- 3. 心跳:每 5 秒强制同步一次到 Flask ----------
if now - last_broadcast > 5.0:
try:
self._manager_send()
except Exception as e:
print(f"[Listen] 周期同步到 Flask 失败: {e}")
else:
last_broadcast = now
time.sleep(1)
# 判断设备是否信任
def _is_trusted(self, udid: str) -> bool:
try:
d = tidevice.Device(udid)
# 随便读一个需要 lockdown/配对的字段
_ = d.product_version # 或 d.info视你当前 tidevice 版本而定
return True
except Exception as e:
msg = str(e)
# 这里只是示意,你可以根据你本地真实报错关键字再精细一点
if "NotTrusted" in msg or "Please trust" in msg or "InvalidHostID" in msg:
print(f"[Trust] 设备未信任udid={udid}, err={msg}")
return False
# 如果是别的错误(比如瞬时通信异常),我倾向于当作“暂时不信任”,避免把有问题的设备加进去
print(f"[Trust] 检测信任状态出错,当作未信任处理 udid={udid}, err={msg}")
return False
# ==========================
# 添加设备
# ==========================