Files
BQP/docs/ScriptEngine/Missions.md
2026-07-13 09:25:40 +07:00

3.8 KiB

Missions / Nhiệm vụ Dài hạn

📋 Overview / Tổng quan

Missions là long-running workflows với progress tracking, phù hợp cho các nhiệm vụ phức tạp có thể cancel và track progress.

Lưu ý quan trọng:

  • Mission = method trong script với [Mission] attribute (không có state machine)
  • MissionInstance = instance được tạo từ Mission method khi gọi CreateMission() (có state machine)
  • Xem chi tiết về state machine trong StateMachine_Design.md

🔧 Cách sử dụng / Usage

[Mission(TotalScore = 10)]
public async IAsyncEnumerable<MissionStatus> PickAndPlace(
    string pickLocation,
    string placeLocation,
    [EnumeratorCancellation] CancellationToken ct)
{
    yield return new MissionStatus { Score = 1, Message = "Moving to pick" };
    await MoveTo(pickLocation);

    yield return new MissionStatus { Score = 3, Message = "Picking item" };
    await PerformPick();

    yield return new MissionStatus { Score = 5, Message = "Moving to place" };
    await MoveTo(placeLocation);

    yield return new MissionStatus { Score = 8, Message = "Placing item" };
    await PerformPlace();

    yield return new MissionStatus { Score = 10, Message = "Completed" };
}

⚙️ Đặc điểm / Features

  • IAsyncEnumerable: Return type để track progress
  • CancellationToken support: Có thể cancel mission
  • Progress tracking: Score/TotalScore để track tiến độ
  • Per-instance MissionGlobals: Isolated execution cho mỗi mission instance
  • Persist to database: Mission history được lưu vào database

🎛️ Mission Attributes / Thuộc tính Mission

  • [Mission(TotalScore = number)]: Định nghĩa total score cho progress tracking

📊 Mission Status / Trạng thái Mission

ScriptMissionState Enum (tương ứng với state machine trong StateMachine_Design.md):

  • Idle (0) - MissionInstance chưa được start
  • Running (1) - MissionInstance đang thực thi
  • Canceling (2) - MissionInstance đang được cancel
  • Pausing (3) - MissionInstance đang được pause
  • Paused (4) - MissionInstance đã bị pause
  • Resuming (5) - MissionInstance đang được resume
  • Canceled (6) - MissionInstance đã bị cancel
  • Completed (7) - MissionInstance đã hoàn thành thành công
  • Error (8) - MissionInstance gặp lỗi

Lưu ý:

  • Mission là method trong script với [Mission] attribute (không có state machine)
  • MissionInstance là instance được tạo từ Mission method khi gọi CreateMission() (có state machine)
  • State machine quản lý state của MissionInstance, không phải Mission
  • Terminal states (Completed, Canceled, Error) là final states - khi về các state này, MissionInstance sẽ:
    1. Lưu trạng thái, log và score vào database
    2. Dispose MissionInstance

🔄 Mission Management APIs / API Quản lý Mission

// Create mission
Guid missionId = CreateMission("DeliverPackage",
    fromLocation: "A1",
    toLocation: "B2");

// Cancel mission
CancelMission(missionId);

💾 Data Persistence / Lưu trữ Dữ liệu

Missions được persist vào database với MissionInstances và MissionLogs tables.


Last Updated: 2025-11-13