diff --git a/src/MeoAssistant/CopilotTask.cpp b/src/MeoAssistant/CopilotTask.cpp index b1f0054aec..38aadd96a3 100644 --- a/src/MeoAssistant/CopilotTask.cpp +++ b/src/MeoAssistant/CopilotTask.cpp @@ -6,45 +6,45 @@ #include "BattleFormationTask.h" asst::CopilotTask::CopilotTask(const AsstCallback& callback, void* callback_arg) - : PackageTask(callback, callback_arg, TaskType), - m_formation_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_battle_task_ptr(std::make_shared(callback, callback_arg, TaskType)) + : PackageTask(callback, callback_arg, TaskType), + m_formation_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_battle_task_ptr(std::make_shared(callback, callback_arg, TaskType)) { - auto start_1_tp = std::make_shared(callback, callback_arg, TaskType); - start_1_tp->set_tasks({ "BattleStartPre" }) - .set_retry_times(0) - .set_ignore_error(true); - m_subtasks.emplace_back(start_1_tp); + auto start_1_tp = std::make_shared(callback, callback_arg, TaskType); + start_1_tp->set_tasks({ "BattleStartPre" }) + .set_retry_times(0) + .set_ignore_error(true); + m_subtasks.emplace_back(start_1_tp); - m_subtasks.emplace_back(m_formation_task_ptr)->set_ignore_error(false).set_retry_times(0); + m_subtasks.emplace_back(m_formation_task_ptr)->set_ignore_error(false).set_retry_times(0); - auto start_2_tp = std::make_shared(callback, callback_arg, TaskType); - start_2_tp->set_tasks({ "BattleStartNormal", "BattleStartRaid", "BattleStartExercise", "BattleStartSimulation" }) - .set_ignore_error(false); - m_subtasks.emplace_back(start_2_tp); + auto start_2_tp = std::make_shared(callback, callback_arg, TaskType); + start_2_tp->set_tasks({ "BattleStartNormal", "BattleStartRaid", "BattleStartExercise", "BattleStartSimulation" }) + .set_ignore_error(false); + m_subtasks.emplace_back(start_2_tp); - m_subtasks.emplace_back(m_battle_task_ptr)->set_retry_times(0); + m_subtasks.emplace_back(m_battle_task_ptr)->set_retry_times(0); } bool asst::CopilotTask::set_params(const json::value& params) { - if (m_finished) { - return false; - } + if (m_running) { + return false; + } - auto stage_name_opt = params.find("stage_name"); - if (!stage_name_opt) { - return false; - } + auto stage_name_opt = params.find("stage_name"); + if (!stage_name_opt) { + return false; + } - const std::string& stage_name = *stage_name_opt; - m_battle_task_ptr->set_stage_name(stage_name); - m_formation_task_ptr->set_stage_name(stage_name); + const std::string& stage_name = *stage_name_opt; + m_battle_task_ptr->set_stage_name(stage_name); + m_formation_task_ptr->set_stage_name(stage_name); - bool with_formation = params.get("formation", false); - m_formation_task_ptr->set_enable(with_formation); + bool with_formation = params.get("formation", false); + m_formation_task_ptr->set_enable(with_formation); - std::string filename = params.get("filename", std::string()); - // 文件名为空时,不加载资源,直接返回 true - return filename.empty() || Resrc.copilot().load(filename); -} + std::string filename = params.get("filename", std::string()); + // 文件名为空时,不加载资源,直接返回 true + return filename.empty() || Resrc.copilot().load(filename); +} \ No newline at end of file diff --git a/src/MeoAssistant/FightTask.cpp b/src/MeoAssistant/FightTask.cpp index 69035cc6b4..737dec567b 100644 --- a/src/MeoAssistant/FightTask.cpp +++ b/src/MeoAssistant/FightTask.cpp @@ -73,7 +73,7 @@ bool asst::FightTask::set_params(const json::value& params) m_stage_drops_plugin_ptr->set_specify_quantity(drops); } - if (!m_finished) { + if (!m_running) { if (stage.empty()) { m_start_up_task_ptr->set_tasks({ "UsePrts", "UsePrts-StageSN", "StartButton1", "StageBegin" }); m_last_battle_task_ptr->set_enable(true); diff --git a/src/MeoAssistant/InfrastTask.cpp b/src/MeoAssistant/InfrastTask.cpp index 3efdf9bf57..9b86bae894 100644 --- a/src/MeoAssistant/InfrastTask.cpp +++ b/src/MeoAssistant/InfrastTask.cpp @@ -15,95 +15,95 @@ #include "ReplenishOriginiumShardTaskPlugin.h" asst::InfrastTask::InfrastTask(const AsstCallback& callback, void* callback_arg) - : PackageTask(callback, callback_arg, TaskType), - m_infrast_begin_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_info_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_mfg_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_trade_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_power_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_control_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_reception_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_office_task_ptr(std::make_shared(callback, callback_arg, TaskType)), - m_dorm_task_ptr(std::make_shared(callback, callback_arg, TaskType)) + : PackageTask(callback, callback_arg, TaskType), + m_infrast_begin_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_info_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_mfg_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_trade_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_power_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_control_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_reception_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_office_task_ptr(std::make_shared(callback, callback_arg, TaskType)), + m_dorm_task_ptr(std::make_shared(callback, callback_arg, TaskType)) { - m_infrast_begin_task_ptr->set_tasks({ "InfrastBegin" }); - m_trade_task_ptr->register_plugin()->set_retry_times(0); - m_replenish_task_ptr = m_mfg_task_ptr->register_plugin(); + m_infrast_begin_task_ptr->set_tasks({ "InfrastBegin" }); + m_trade_task_ptr->register_plugin()->set_retry_times(0); + m_replenish_task_ptr = m_mfg_task_ptr->register_plugin(); - m_subtasks.emplace_back(m_infrast_begin_task_ptr); + m_subtasks.emplace_back(m_infrast_begin_task_ptr); } bool asst::InfrastTask::set_params(const json::value& params) { - if (!m_finished) { - auto facility_opt = params.find("facility"); - if (!facility_opt) { - return false; - } + if (!m_running) { + auto facility_opt = params.find("facility"); + if (!facility_opt) { + return false; + } - auto append_infrast_begin = [&]() { - m_subtasks.emplace_back(m_infrast_begin_task_ptr); - }; + auto append_infrast_begin = [&]() { + m_subtasks.emplace_back(m_infrast_begin_task_ptr); + }; - m_subtasks.clear(); - append_infrast_begin(); - m_subtasks.emplace_back(m_info_task_ptr); + m_subtasks.clear(); + append_infrast_begin(); + m_subtasks.emplace_back(m_info_task_ptr); - for (const auto& facility_json : facility_opt.value()) { - if (!facility_json.is_string()) { - m_subtasks.clear(); - append_infrast_begin(); - return false; - } + for (const auto& facility_json : facility_opt.value()) { + if (!facility_json.is_string()) { + m_subtasks.clear(); + append_infrast_begin(); + return false; + } - std::string facility = facility_json.as_string(); - if (facility == "Dorm") { - m_subtasks.emplace_back(m_dorm_task_ptr); - } - else if (facility == "Mfg") { - m_subtasks.emplace_back(m_mfg_task_ptr); - } - else if (facility == "Trade") { - m_subtasks.emplace_back(m_trade_task_ptr); - } - else if (facility == "Power") { - m_subtasks.emplace_back(m_power_task_ptr); - } - else if (facility == "Office") { - m_subtasks.emplace_back(m_office_task_ptr); - } - else if (facility == "Reception") { - m_subtasks.emplace_back(m_reception_task_ptr); - } - else if (facility == "Control") { - m_subtasks.emplace_back(m_control_task_ptr); - } - else { - Log.error(__FUNCTION__, "| Unknown facility", facility); - m_subtasks.clear(); - append_infrast_begin(); - return false; - } - append_infrast_begin(); - } - } + std::string facility = facility_json.as_string(); + if (facility == "Dorm") { + m_subtasks.emplace_back(m_dorm_task_ptr); + } + else if (facility == "Mfg") { + m_subtasks.emplace_back(m_mfg_task_ptr); + } + else if (facility == "Trade") { + m_subtasks.emplace_back(m_trade_task_ptr); + } + else if (facility == "Power") { + m_subtasks.emplace_back(m_power_task_ptr); + } + else if (facility == "Office") { + m_subtasks.emplace_back(m_office_task_ptr); + } + else if (facility == "Reception") { + m_subtasks.emplace_back(m_reception_task_ptr); + } + else if (facility == "Control") { + m_subtasks.emplace_back(m_control_task_ptr); + } + else { + Log.error(__FUNCTION__, "| Unknown facility", facility); + m_subtasks.clear(); + append_infrast_begin(); + return false; + } + append_infrast_begin(); + } + } - std::string drones = params.get("drones", "_NotUse"); - m_mfg_task_ptr->set_uses_of_drone(drones); - m_trade_task_ptr->set_uses_of_drone(drones); + std::string drones = params.get("drones", "_NotUse"); + m_mfg_task_ptr->set_uses_of_drone(drones); + m_trade_task_ptr->set_uses_of_drone(drones); - double threshold = params.get("threshold", 0.3); - m_info_task_ptr->set_mood_threshold(threshold); - m_mfg_task_ptr->set_mood_threshold(threshold); - m_trade_task_ptr->set_mood_threshold(threshold); - m_power_task_ptr->set_mood_threshold(threshold); - m_control_task_ptr->set_mood_threshold(threshold); - m_reception_task_ptr->set_mood_threshold(threshold); - m_office_task_ptr->set_mood_threshold(threshold); - m_dorm_task_ptr->set_mood_threshold(threshold); + double threshold = params.get("threshold", 0.3); + m_info_task_ptr->set_mood_threshold(threshold); + m_mfg_task_ptr->set_mood_threshold(threshold); + m_trade_task_ptr->set_mood_threshold(threshold); + m_power_task_ptr->set_mood_threshold(threshold); + m_control_task_ptr->set_mood_threshold(threshold); + m_reception_task_ptr->set_mood_threshold(threshold); + m_office_task_ptr->set_mood_threshold(threshold); + m_dorm_task_ptr->set_mood_threshold(threshold); - bool replenish = params.get("replenish", false); - m_replenish_task_ptr->set_enable(replenish); + bool replenish = params.get("replenish", false); + m_replenish_task_ptr->set_enable(replenish); - return true; -} + return true; +} \ No newline at end of file diff --git a/src/MeoAssistant/PackageTask.cpp b/src/MeoAssistant/PackageTask.cpp index 970c96c59c..0ece122073 100644 --- a/src/MeoAssistant/PackageTask.cpp +++ b/src/MeoAssistant/PackageTask.cpp @@ -5,81 +5,81 @@ bool asst::PackageTask::run() { - if (!m_enable) { - Log.info("task disabled, pass", basic_info().to_string()); - return true; - } - m_finished = true; + if (!m_enable) { + Log.info("task disabled, pass", basic_info().to_string()); + return true; + } + m_running = true; - const auto task_delay = Resrc.cfg().get_options().task_delay; + const auto task_delay = Resrc.cfg().get_options().task_delay; - for (size_t i = 0; i != m_subtasks.size(); ++i) { - if (need_exit()) { - return false; - } + for (size_t i = 0; i != m_subtasks.size(); ++i) { + if (need_exit()) { + return false; + } - auto task_ptr = m_subtasks.at(i); - if (!task_ptr->get_enable()) { - continue; - } + auto task_ptr = m_subtasks.at(i); + if (!task_ptr->get_enable()) { + continue; + } - task_ptr->set_exit_flag(m_exit_flag) - .set_ctrler(m_ctrler) - .set_status(m_status) - .set_task_id(m_task_id); + task_ptr->set_exit_flag(m_exit_flag) + .set_ctrler(m_ctrler) + .set_status(m_status) + .set_task_id(m_task_id); - if (!task_ptr->run() && !task_ptr->get_ignore_error()) { - return false; - } + if (!task_ptr->run() && !task_ptr->get_ignore_error()) { + return false; + } - if (i != m_subtasks.size() - 1) { - sleep(task_delay); - } - } - return true; + if (i != m_subtasks.size() - 1) { + sleep(task_delay); + } + } + return true; } asst::AbstractTask& asst::PackageTask::set_exit_flag(bool* exit_flag) noexcept { - AbstractTask::set_exit_flag(exit_flag); - for (auto&& sub : m_subtasks) { - sub->set_exit_flag(exit_flag); - } - return *this; + AbstractTask::set_exit_flag(exit_flag); + for (auto&& sub : m_subtasks) { + sub->set_exit_flag(exit_flag); + } + return *this; } asst::AbstractTask& asst::PackageTask::set_retry_times(int times) noexcept { - AbstractTask::set_retry_times(times); - for (auto&& sub : m_subtasks) { - sub->set_retry_times(times); - } - return *this; + AbstractTask::set_retry_times(times); + for (auto&& sub : m_subtasks) { + sub->set_retry_times(times); + } + return *this; } asst::AbstractTask& asst::PackageTask::set_ctrler(std::shared_ptr ctrler) noexcept { - AbstractTask::set_ctrler(ctrler); - for (auto&& sub : m_subtasks) { - sub->set_ctrler(ctrler); - } - return *this; + AbstractTask::set_ctrler(ctrler); + for (auto&& sub : m_subtasks) { + sub->set_ctrler(ctrler); + } + return *this; } asst::AbstractTask& asst::PackageTask::set_status(std::shared_ptr status) noexcept { - AbstractTask::set_status(status); - for (auto&& sub : m_subtasks) { - sub->set_status(status); - } - return *this; + AbstractTask::set_status(status); + for (auto&& sub : m_subtasks) { + sub->set_status(status); + } + 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; -} + AbstractTask::set_task_id(task_id); + for (auto&& sub : m_subtasks) { + sub->set_task_id(task_id); + } + return *this; +} \ No newline at end of file diff --git a/src/MeoAssistant/PackageTask.h b/src/MeoAssistant/PackageTask.h index ecb0baa356..222d4fc0a3 100644 --- a/src/MeoAssistant/PackageTask.h +++ b/src/MeoAssistant/PackageTask.h @@ -31,7 +31,7 @@ namespace asst protected: virtual bool _run() override { return true; } - bool m_finished = false; + bool m_running = false; std::vector> m_subtasks; }; } diff --git a/src/MeoAssistant/PipelineTask.cpp b/src/MeoAssistant/PipelineTask.cpp new file mode 100644 index 0000000000..c7b6a42ec5 --- /dev/null +++ b/src/MeoAssistant/PipelineTask.cpp @@ -0,0 +1,37 @@ +#include "PipelineTask.h" + +#include + +#include "ProcessTask.h" +#include "TaskData.h" + +asst::PipelineTask::PipelineTask(const AsstCallback& callback, void* callback_arg) + : PackageTask(callback, callback_arg, TaskType), + m_task_ptr(std::make_shared(callback, callback_arg, TaskType)) +{} + +bool asst::PipelineTask::set_params(const json::value& params) +{ + if (m_running) { + return false; + } + + auto tasks_opt = params.find("tasks"); + if (!tasks_opt) { + return false; + } + + std::vector tasks_vec; + for (const auto& task_json : tasks_opt.value()) { + std::string task_name = task_json.as_string(); + if (!Task.get(task_name)) { // check task name exists + return false; + } + tasks_vec.emplace_back(task_name); + } + if (tasks_vec.empty()) { + return false; + } + m_task_ptr->set_tasks(tasks_vec); + return true; +} diff --git a/src/MeoAssistant/PipelineTask.h b/src/MeoAssistant/PipelineTask.h new file mode 100644 index 0000000000..99d460f18d --- /dev/null +++ b/src/MeoAssistant/PipelineTask.h @@ -0,0 +1,22 @@ +#pragma once +#include "PackageTask.h" + +namespace asst +{ + class ProcessTask; + + class PipelineTask final : public PackageTask + { + public: + PipelineTask(const AsstCallback& callback, void* callback_arg); + virtual ~PipelineTask() override = default; + + virtual bool set_params(const json::value& params) override; + + static constexpr const char* TaskType = "Pipeline"; + + private: + std::vector m_task_name; + std::shared_ptr m_task_ptr; + }; +}