Files
AUTO-MAS-test/docs/Backend_Task_Scheduling_and_WebSocket_Messages.md

8.1 KiB
Raw Blame History

AUTO-MAS 后端任务调度逻辑与WebSocket消息格式说明

1. 任务调度架构概览

AUTO-MAS 后端采用基于 AsyncIO 的异步任务调度系统,主要由以下核心组件构成:

1.1 核心组件

  • TaskManager: 任务调度器,负责任务的创建、运行、停止和清理
  • Broadcast: 消息广播系统,负责在不同组件间传递消息
  • WebSocket: 与前端的实时通信通道
  • Config: 配置管理系统,包含脚本配置、队列配置等

1.2 任务类型

系统支持三种主要任务模式:

  1. 设置脚本 - 直接执行单个脚本配置
  2. 自动代理 - 按队列顺序自动执行多个脚本
  3. 人工排查 - 手动排查和执行任务

2. 任务调度流程

2.1 任务创建流程

前端请求 → API接口 → TaskManager.add_task() → 任务验证 → 创建异步任务 → 返回任务ID

具体步骤:

  1. 任务验证: 根据模式和UID验证任务配置是否存在
  2. 重复检查: 确保相同任务未在运行中
  3. 任务创建: 使用asyncio.create_task()创建异步任务
  4. 回调设置: 添加任务完成回调用于清理工作

2.2 任务执行流程

设置脚本模式

获取脚本配置 → 确定脚本类型(MAA/General) → 创建对应Manager → 执行任务

自动代理模式

获取队列配置 → 构建任务列表 → 逐个执行脚本 → 更新状态 → 发送完成信号

2.3 任务状态管理

  • 等待: 任务已加入队列但未开始执行
  • 运行: 任务正在执行中
  • 跳过: 任务因重复或其他原因被跳过
  • 完成: 任务执行完毕

3. WebSocket 消息系统

3.1 消息基础结构

所有WebSocket消息都遵循统一的JSON格式

{
  "id": "消息ID或任务ID",
  "type": "消息类型",
  "data": {
    "具体数据": "根据类型而定"
  }
}

3.2 消息类型详解

3.2.1 Update 类型 - 数据更新

用途: 通知前端更新界面数据,"user_list"仅给出当前处于运行状态的脚本的用户列表值

常见数据格式:

{
  "id": "task-uuid",
  "type": "Update",
  "data": {
    "user_list": [
      {
        "name": "用户名",
        "status": "运行状态",
        "config": "配置信息"
      }
    ]
  }
}
{
  "id": "task-uuid", 
  "type": "Update",
  "data": {
    "task_dict": [
      {
        "script_id": "脚本ID",
        "status": "等待/运行/完成/跳过",
        "name": "脚本名称",
        "user_list": [
          {
            "name": "用户名",
            "status": "运行状态",
            "config": "配置信息"
          }
        ]
      }
    ]
  }
}
{
  "id": "task-uuid", 
  "type": "Update",
  "data": {
    "task_list": [
      {
        "script_id": "脚本ID",
        "status": "等待/运行/完成/跳过",
        "name": "脚本名称"
      }
    ]
  }
}
{
  "id": "task-uuid",
  "type": "Update", 
  "data": {
    "log": "任务执行日志内容"
  }
}

3.2.2 Info 类型 - 信息显示

用途: 向前端发送需要显示的信息,包括普通信息、警告和错误

数据格式:

{
  "id": "task-uuid",
  "type": "Info",
  "data": {
    "Error": "错误信息内容"
  }
}
{
  "id": "task-uuid",
  "type": "Info",
  "data": {
    "Warning": "警告信息内容"
  }
}
{
  "id": "task-uuid",
  "type": "Info",
  "data": {
    "Info": "普通信息内容"
  }
}

3.2.3 Message 类型 - 对话框请求

用途: 请求前端弹出对话框显示重要信息

数据格式:

{
  "id": "task-uuid",
  "type": "Message",
  "data": {
    "title": "对话框标题",
    "content": "对话框内容",
    "type": "info/warning/error"
  }
}

3.2.4 Signal 类型 - 程序信号

用途: 发送程序控制信号和状态通知

常见信号:

任务完成信号:

{
  "id": "task-uuid",
  "type": "Signal", 
  "data": {
    "Accomplish": "任务完成后调度台显示的日志内容"
  }
}

电源操作信号:

{
  "id": "task-uuid",
  "type": "Signal",
  "data": {
    "power": "NoAction/KillSelf/Sleep/Hibernate/Shutdown/ShutdownForce",
  }
}

心跳信号:

{
  "id": "Main",
  "type": "Signal",
  "data": {
    "Ping": "无描述"
  }
}
{
  "id": "Main", 
  "type": "Signal",
  "data": {
    "Pong": "无描述"
  }
}

4. 任务管理器详细说明

4.1 TaskManager 核心方法

add_task(mode: str, uid: str)

  • 功能: 添加新任务到调度队列
  • 参数:
    • mode: 任务模式 ("设置脚本", "自动代理", "人工排查")
    • uid: 任务唯一标识符
  • 返回: 任务UUID

stop_task(task_id: str)

  • 功能: 停止指定任务
  • 参数:
    • task_id: 任务ID支持 "ALL" 停止所有任务

run_task(mode: str, task_id: UUID, actual_id: Optional[UUID])

  • 功能: 执行具体任务逻辑
  • 流程: 根据模式选择相应的执行策略

4.2 任务执行器

GeneralManager

  • 用途: 处理通用脚本任务
  • 特点: 支持自定义脚本路径和参数
  • 配置: 基于 GeneralConfig 和 GeneralUserConfig

MaaManager

  • 用途: 处理MAA (明日方舟助手) 专用任务
  • 特点: 支持模拟器控制、ADB连接、游戏自动化
  • 配置: 基于 MaaConfig 和 MaaUserConfig

5. 消息广播系统

5.1 Broadcast 机制

  • 设计模式: 发布-订阅模式
  • 功能: 实现组件间解耦的消息传递
  • 特点: 支持多个订阅者同时接收消息

5.2 消息流向

任务执行器 → Broadcast → WebSocket → 前端界面
                    ↓
                 其他订阅者

6. 配置管理系统

6.1 配置类型

  • ScriptConfig: 脚本配置包含MAA和General两种类型
  • QueueConfig: 队列配置,定义自动代理任务的执行顺序
  • GlobalConfig: 全局系统配置

6.2 配置操作

  • 锁机制: 防止配置在使用时被修改
  • 实时更新: 支持动态加载配置变更
  • 类型验证: 确保配置数据的正确性

7. API 接口说明

7.1 任务控制接口

创建任务

  • 端点: POST /api/dispatch/start
  • 请求体:
    {
      "mode": "自动代理|人工排查|设置脚本",
      "taskId": "目标任务ID"
    }
    
  • 响应:
    {
      "code": 200,
      "status": "success", 
      "message": "操作成功",
      "websocketId": "新任务ID"
    }
    

停止任务

  • 端点: POST /api/dispatch/stop
  • 请求体:
    {
      "taskId": "要停止的任务ID"
    }
    

电源操作

  • 端点: POST /api/dispatch/power
  • 请求体:
    {
      "signal": "NoAction|Shutdown|ShutdownForce|Hibernate|Sleep|KillSelf"
    }
    

7.2 WebSocket 连接

端点: WS /api/core/ws

连接特性:

  • 同时只允许一个WebSocket连接
  • 自动心跳检测 (15秒超时)
  • 连接断开时自动清理资源

8. 错误处理机制

8.1 异常类型

  • ValueError: 配置验证失败
  • RuntimeError: 任务状态冲突
  • TimeoutError: 操作超时
  • ConnectionError: 连接相关错误

8.2 错误响应格式

{
  "id": "相关任务ID",
  "type": "Info",
  "data": {
    "Error": "具体错误描述"
  }
}

9. 性能和监控

9.1 日志系统

  • 分层日志: 按模块划分日志记录器
  • 实时监控: 支持日志实时推送到前端
  • 文件轮转: 自动管理日志文件大小

9.2 资源管理

  • 进程管理: 自动清理子进程
  • 内存监控: 防止内存泄漏
  • 连接池: 复用数据库和网络连接

10. 安全考虑

10.1 输入验证

  • 参数校验: 使用 Pydantic 模型验证
  • 路径安全: 防止路径遍历攻击
  • 命令注入: 严格控制执行的命令参数

10.2 权限控制

  • 单一连接: 限制WebSocket连接数量
  • 操作限制: 防止重复或冲突操作
  • 资源保护: 防止资源滥用

此文档基于 AUTO-MAS v5.0.0 版本编写详细的API文档和配置说明请参考相关配置文件和源代码注释。