mrDarker
2025-10-22 e8a27bb203fe2aff70390a5eca002d7438da9b0f
SourceCode/Bond/Servo/CControlJob.h
@@ -36,14 +36,17 @@
    /// CControlJob:Control Job 管理类
    class CControlJob {
    public:
        CControlJob();
        explicit CControlJob(std::string cjId);
        explicit CControlJob(CControlJob& src);
        // —— 基本属性 —— //
        const std::string& id()     const noexcept { return m_cjId; }
        void setId(std::string& id);
        CJState            state()  const noexcept { return m_state; }
        uint8_t            priority() const noexcept { return m_priority; }
        void               setPriority(uint8_t p) noexcept { m_priority = p; }
        std::string getStateText();
        // —— PJ 列表维护(去重)—— //
        bool addPJ(const std::string& pjId);                // 已存在则不重复添加
@@ -52,7 +55,10 @@
        bool containsPJ(const std::string& pjId) const;
        const std::vector<std::string>& pjIds() const noexcept { return m_pjIds; }
        bool setPJs(const std::vector<CProcessJob*>& pjs);
        bool removePjPointer(const std::string& id);
        bool addPjPointer(CProcessJob* pj);
        void clearPJs() { m_pjIds.clear(); }
        const std::vector<CProcessJob*>& getPjs() { return m_pjs; };
        // —— 校验 —— //
        struct ValidationIssue { uint32_t code; std::string text; };
@@ -65,7 +71,8 @@
            const std::function<bool(const std::string&)>& getPjExistsFn,
            const std::function<bool(const std::string&)>& canJoinFn
        );
        const std::vector<CControlJob::ValidationIssue>& CControlJob::issues();
        const std::vector<ValidationIssue>& CControlJob::issues();
        void clearIssues();
        // —— S14F9 → S14F10 的“应用结果”模型 —— //
        struct CreateRequest {
@@ -92,7 +99,7 @@
        bool pause();          // Executing -> Paused
        bool resume();         // Paused -> Executing
        bool complete();       // Executing/Paused -> Completed
        bool abort();          // 非终态 -> Aborted
        bool abort(std::string reason);          // 非终态 -> Aborted
        bool fail(std::string reason); // 任意 -> Failed
        const std::string& failReason() const noexcept { return m_failReason; }
@@ -111,12 +118,18 @@
        static void clampString(std::string& s, size_t maxLen);
        static bool asciiPrintable(const std::string& s);
        static constexpr uint32_t CJ_MAGIC = 0x434A5031; // "CJP1"
        static constexpr uint16_t CJ_VERSION = 0x0001;
        void serialize(std::ostream& os) const;
        static bool deserialize(std::istream& is, CControlJob& out, std::string* err = nullptr);
    private:
        void markQueued();
        void markStart();
        void markEnd();
    private:
    protected:
        // —— 标识 & 配置 —— //
        std::string m_cjId;
        uint8_t     m_priority{ 5 }; // 缺省优先级(自定)