Skip to content

是否需要为 IGameActionHandler 提供一个通用的主线程队列实现? #33

Description

@hby7921

现在 OpenGameAgent 已经有 IGameActionHandlerDurableGameActionDispatcher、动作日志和收据,文档里也说明了游戏动作需要回到宿主的主线程执行。不过目前每个游戏接入时,仍然要自己写一套动作队列、主线程 Pump、取消、关闭清理和恢复逻辑。

在实际接入游戏 AI 时,比较常见的流程是:

游戏线程采集状态快照 → 后台线程调用 LLM → 生成动作请求 → 回到游戏线程验证并执行 → 返回动作结果

这里通常还要处理队列积压、场景或存档切换、请求超时、重复提交和已经派发但还没有收据的动作。

想请教一下,是否考虑在现有 IGameActionHandler 基础上提供一个通用实现,例如 QueuedGameActionHandler,由宿主在主线程调用 Pump(maximumWorkItems),统一处理:

  • 有界待处理动作队列;
  • 每次 Pump 的处理上限;
  • 尚未执行动作的取消;
  • 运行时停止时清理等待中的动作;
  • 已开始执行的动作不因调用方超时而盲目取消;
  • 通过主线程执行 RecoverAsync
  • 继续复用现有的 GameActionReceiptoperationIdgenerationId

这样游戏接入方只需要负责游戏状态验证和实际动作执行,主线程交接和等待任务管理可以由 Runtime 统一处理。

想先确认几个方向:

  1. 这类实现是否适合放在 OpenGameAgent 核心 Runtime 中?
  2. 还是主线程队列应该继续完全由各个宿主自行实现?
  3. 如果提供标准实现,generationId 的过期判断应该由 Runtime 处理,还是由游戏宿主处理?

如果这个方向合适,我可以提交一个pr

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions