Skip to content

scrcpy stream disconnect causes reward API ADB closed failure #367

@yltx

Description

@yltx

问题描述

在 GUI 运行过程中,出现 scrcpy 视频流已断开 后,调用 POST /api/reward/collect 会触发 adbutils.errors.AdbError: closed

当前行为:

  1. 后端记录 warning:[API] 收取奖励失败: closed
  2. 打印非常长的 traceback(噪音较大)
  3. HTTP 仍返回 200(ApiResponse.success=false)

关键日志链路

  • [Emulator] scrcpy 视频流已断开
  • [API] 收取奖励失败: closed
  • traceback 最终落在:
    • autowsgr/server/routes/ops.py reward_collect
    • autowsgr/ops/reward.py -> goto_page(ctx, PageName.MAIN)
    • autowsgr/ui/map/base.py -> ctrl.click(...)
    • adbutils.errors.AdbError: closed

代码位置

  • autowsgr/server/routes/ops.py line ~126-142 (reward_collect)
  • autowsgr/emulator/controller/scrcpy.py line ~275 (视频流断开)

影响

  • scrcpy/adb 断链后,运营类 API(如 reward_collect)容易失败
  • 返回 200 但 success=false,调用方很难基于状态码区分“设备断链”与普通业务失败
  • traceback 过长,污染日志

建议

  1. AdbError: closed / 设备断链场景做专门捕获并返回更明确语义(建议 503 或 409 + machine-readable error code)。
  2. 在路由层增加设备连接健康检查(或统一守卫)后再执行 UI 操作。
  3. 对预期连接中断类异常降噪,避免整段 traceback。
    4.(可选)尝试自动重连 scrcpy/adb 或触发统一恢复流程。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions