diff --git a/docs/回调消息协议.md b/docs/回调消息协议.md index 35116f2f5f..8f8132eb2f 100644 --- a/docs/回调消息协议.md +++ b/docs/回调消息协议.md @@ -113,6 +113,7 @@ Todo ```jsonc { "taskchain": string, // 当前的任务链 + "taskid": int, // 当前任务 TaskId "uuid": string // 设备唯一码 } ``` @@ -128,6 +129,7 @@ Todo "subtask": string, // 子任务名 "class": string, // 子任务符号名 "taskchain": string, // 当前任务链 + "taskid": int, // 当前任务 TaskId "details": object, // 详情 "uuid": string // 设备唯一码 } diff --git a/src/MeoAssistant/AbstractTask.cpp b/src/MeoAssistant/AbstractTask.cpp index 37691402a7..4eec1afb33 100644 --- a/src/MeoAssistant/AbstractTask.cpp +++ b/src/MeoAssistant/AbstractTask.cpp @@ -80,6 +80,12 @@ AbstractTask& asst::AbstractTask::set_enable(bool enable) noexcept return *this; } +AbstractTask& asst::AbstractTask::set_task_id(int task_id) noexcept +{ + m_task_id = task_id; + return *this; +} + void asst::AbstractTask::clear_plugin() noexcept { m_plugins.clear(); @@ -103,6 +109,7 @@ json::value asst::AbstractTask::basic_info() const m_basic_info_cache = json::object{ { "taskchain", m_task_chain }, + { "taskid", m_task_id }, { "class", class_name }, { "subtask", task_name }, { "details", json::object() } @@ -165,6 +172,7 @@ void asst::AbstractTask::callback(AsstMsg msg, const json::value& detail) for (TaskPluginPtr plugin : m_plugins) { plugin->set_exit_flag(m_exit_flag); plugin->set_ctrler(m_ctrler); + plugin->set_task_id(m_task_id); plugin->set_status(m_status); plugin->set_task_ptr(this); diff --git a/src/MeoAssistant/AbstractTask.h b/src/MeoAssistant/AbstractTask.h index 31f949686e..aadf82b168 100644 --- a/src/MeoAssistant/AbstractTask.h +++ b/src/MeoAssistant/AbstractTask.h @@ -31,11 +31,12 @@ namespace asst virtual bool run(); - AbstractTask& set_exit_flag(bool* exit_flag) noexcept; - AbstractTask& set_retry_times(int times) noexcept; - AbstractTask& set_ctrler(std::shared_ptr ctrler) noexcept; - AbstractTask& set_status(std::shared_ptr status) noexcept; - AbstractTask& set_enable(bool enable) noexcept; + virtual AbstractTask& set_exit_flag(bool* exit_flag) noexcept; + virtual AbstractTask& set_retry_times(int times) noexcept; + virtual AbstractTask& set_ctrler(std::shared_ptr ctrler) noexcept; + virtual AbstractTask& set_status(std::shared_ptr status) noexcept; + virtual AbstractTask& set_enable(bool enable) noexcept; + virtual AbstractTask& set_task_id(int task_id) noexcept; template std::shared_ptr regiseter_plugin() @@ -51,6 +52,7 @@ namespace asst bool get_enable() const noexcept { return m_enable; } const std::string& get_task_chain() const noexcept { return m_task_chain; } + int get_task_id() const noexcept { return m_task_id; } virtual json::value basic_info() const; constexpr static int RetryTimesDefault = 20; @@ -74,6 +76,7 @@ namespace asst int m_retry_times = RetryTimesDefault; mutable json::value m_basic_info_cache; + int m_task_id = 0; std::set m_plugins; std::shared_ptr m_ctrler = nullptr; std::shared_ptr m_status = nullptr; diff --git a/src/MeoAssistant/Assistant.cpp b/src/MeoAssistant/Assistant.cpp index 49a5d82938..c16757dff0 100644 --- a/src/MeoAssistant/Assistant.cpp +++ b/src/MeoAssistant/Assistant.cpp @@ -129,6 +129,7 @@ asst::Assistant::TaskId asst::Assistant::append_task(const std::string& type, co std::unique_lock lock(m_mutex); ++m_task_id; + ptr->set_task_id(m_task_id); m_tasks_list.emplace_back(m_task_id, ptr); return m_task_id; } @@ -225,7 +226,8 @@ void Assistant::working_proc() lock.unlock(); json::value callback_json = json::object{ - { "taskchain", task_ptr->get_task_chain() } + { "taskchain", task_ptr->get_task_chain() }, + { "taskid", task_ptr->get_task_id() } }; task_callback(AsstMsg::TaskChainStart, callback_json, this); diff --git a/src/MeoAssistant/AutoRecruitTask.cpp b/src/MeoAssistant/AutoRecruitTask.cpp index 3fce4a881c..1712dfcd5a 100644 --- a/src/MeoAssistant/AutoRecruitTask.cpp +++ b/src/MeoAssistant/AutoRecruitTask.cpp @@ -112,7 +112,8 @@ bool asst::AutoRecruitTask::calc_and_recruit() .set_retry_times(m_retry_times) .set_exit_flag(m_exit_flag) .set_ctrler(m_ctrler) - .set_status(m_status); + .set_status(m_status) + .set_task_id(m_task_id); // 识别错误,放弃这个公招位,直接返回 if (!recruit_task.run()) { diff --git a/src/MeoAssistant/PackageTask.cpp b/src/MeoAssistant/PackageTask.cpp index 9c2d956981..1370cb4fb1 100644 --- a/src/MeoAssistant/PackageTask.cpp +++ b/src/MeoAssistant/PackageTask.cpp @@ -25,7 +25,8 @@ bool asst::PackageTask::run() task_ptr->set_exit_flag(m_exit_flag) .set_ctrler(m_ctrler) - .set_status(m_status); + .set_status(m_status) + .set_task_id(m_task_id); if (!task_ptr->run()) { return false; @@ -73,3 +74,12 @@ asst::AbstractTask& asst::PackageTask::set_status(std::shared_ptr } return *this; } + +asst::AbstractTask& asst::PackageTask::set_task_id(int task_id) noexcept +{ + AbstractTask::set_task_id(task_id); + for (auto&& sub : m_subtasks) { + sub->set_task_id(task_id); + } + return *this; +} diff --git a/src/MeoAssistant/PackageTask.h b/src/MeoAssistant/PackageTask.h index 98c9747eb4..5b9e96e6c8 100644 --- a/src/MeoAssistant/PackageTask.h +++ b/src/MeoAssistant/PackageTask.h @@ -22,10 +22,11 @@ namespace asst virtual bool set_params([[maybe_unused]] const json::value& params) { return true; } - virtual AbstractTask& set_exit_flag(bool* exit_flag) noexcept; - virtual AbstractTask& set_retry_times(int times) noexcept; - virtual AbstractTask& set_ctrler(std::shared_ptr ctrler) noexcept; - virtual AbstractTask& set_status(std::shared_ptr status) noexcept; + virtual AbstractTask& set_exit_flag(bool* exit_flag) noexcept override; + virtual AbstractTask& set_retry_times(int times) noexcept override; + virtual AbstractTask& set_ctrler(std::shared_ptr ctrler) noexcept override; + virtual AbstractTask& set_status(std::shared_ptr status) noexcept override; + virtual AbstractTask& set_task_id(int task_id) noexcept override; protected: virtual bool _run() override { return true; }