| | |
| | | /// 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); // 已存在则不重复添加 |
| | |
| | | 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; }; |
| | |
| | | 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 { |
| | |
| | | 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; } |
| | |
| | | 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 }; // 缺省优先级(自定) |