perf.以一种更安全的方式禁用SubTask

This commit is contained in:
MistEO
2022-03-12 21:51:09 +08:00
parent 8962da2278
commit dca1aebeef
8 changed files with 47 additions and 25 deletions

View File

@@ -25,6 +25,10 @@ AbstractTask::AbstractTask(AsstCallback callback, void* callback_arg, std::strin
bool asst::AbstractTask::run()
{
if (!m_enable) {
Log.info("task is disable, pass", basic_info().to_string());
return true;
}
callback(AsstMsg::SubTaskStart, basic_info());
for (m_cur_retry = 0; m_cur_retry <= m_retry_times; ++m_cur_retry) {
if (_run()) {
@@ -70,6 +74,12 @@ AbstractTask& asst::AbstractTask::set_status(std::shared_ptr<RuntimeStatus> stat
return *this;
}
AbstractTask& asst::AbstractTask::set_enable(bool enable) noexcept
{
m_enable = enable;
return *this;
}
void asst::AbstractTask::clear_plugin() noexcept
{
m_plugins.clear();

View File

@@ -35,6 +35,7 @@ namespace asst
virtual AbstractTask& set_retry_times(int times) noexcept;
virtual AbstractTask& set_ctrler(std::shared_ptr<Controller> ctrler) noexcept;
virtual AbstractTask& set_status(std::shared_ptr<RuntimeStatus> status) noexcept;
virtual AbstractTask& set_enable(bool enable) noexcept;
template<typename PluginType>
std::shared_ptr<PluginType> regiseter_plugin()
@@ -63,6 +64,7 @@ namespace asst
bool need_exit() const;
bool save_image(const cv::Mat image, const std::string& dir);
bool m_enable = true;
AsstCallback m_callback;
void* m_callback_arg = nullptr;
bool* m_exit_flag = nullptr;

View File

@@ -109,8 +109,11 @@ bool asst::AutoRecruitTask::recruit_index(size_t index)
bool asst::AutoRecruitTask::calc_and_recruit()
{
RecruitCalcTask recurit_task(m_callback, m_callback_arg, m_task_chain);
recurit_task.set_retry_times(m_retry_times);
recurit_task.set_param(m_select_level, true);
recurit_task.set_param(m_select_level, true)
.set_retry_times(m_retry_times)
.set_exit_flag(m_exit_flag)
.set_ctrler(m_ctrler)
.set_status(m_status);
// 识别错误,放弃这个公招位,直接返回
if (!recurit_task.run()) {

View File

@@ -15,13 +15,15 @@ asst::FightTask::FightTask(AsstCallback callback, void* callback_arg)
.set_times_limit("StartButton1", 0)
.set_times_limit("StartButton2", 0)
.set_times_limit("MedicineConfirm", 0)
.set_times_limit("StoneConfirm", 0);
.set_times_limit("StoneConfirm", 0)
.set_enable(false);
// 进入对应的关卡
m_stage_task_ptr->set_times_limit("StartButton1", 0)
.set_times_limit("StartButton2", 0)
.set_times_limit("MedicineConfirm", 0)
.set_times_limit("StoneConfirm", 0);
.set_times_limit("StoneConfirm", 0)
.set_enable(false);
// 开始战斗任务
m_fight_task_ptr->set_tasks({ "FightBegin" })
@@ -32,6 +34,8 @@ asst::FightTask::FightTask(AsstCallback callback, void* callback_arg)
m_stage_drops_plugin_ptr = m_fight_task_ptr->regiseter_plugin<StageDropsTaskPlugin>();
m_stage_drops_plugin_ptr->set_retry_times(0);
m_subtasks.emplace_back(m_start_up_task_ptr);
m_subtasks.emplace_back(m_stage_task_ptr);
m_subtasks.emplace_back(m_fight_task_ptr);
}
@@ -44,15 +48,10 @@ bool asst::FightTask::set_params(const json::value& params)
std::string penguin_id = params.get("penguin_id", "");
if (!m_runned) {
m_start_up_task_ptr->set_enable(true);
m_stage_task_ptr->set_enable(true);
m_stage_task_ptr->set_tasks({ stage });
m_subtasks.clear();
if (!stage.empty()) {
m_subtasks.emplace_back(m_start_up_task_ptr);
m_subtasks.emplace_back(m_stage_task_ptr);
}
m_subtasks.emplace_back(m_fight_task_ptr);
}
m_fight_task_ptr->set_times_limit("MedicineConfirm", mecidine)

View File

@@ -9,15 +9,16 @@ asst::MallTask::MallTask(AsstCallback callback, void* callback_arg)
m_shopping_task_ptr(std::make_shared<CreditShoppingTask>(callback, callback_arg, TaskType))
{
m_mall_task_ptr->set_tasks({ "MallBegin" });
m_shopping_task_ptr->set_enable(false);
m_subtasks.emplace_back(m_mall_task_ptr);
m_subtasks.emplace_back(nullptr); // reserved for m_shopping_task_ptr
m_subtasks.emplace_back(m_shopping_task_ptr);
}
bool asst::MallTask::set_params(const json::value& params)
{
bool shopping = params.get("shopping", true);
auto& shop_ref = m_subtasks.at(1);
if (shopping) {
if (params.contains("shopping_list") && params.at("shopping_list").is_array()) {
std::vector<std::string> shopping_list;
@@ -34,10 +35,10 @@ bool asst::MallTask::set_params(const json::value& params)
else {
return false;
}
shop_ref = m_shopping_task_ptr;
m_shopping_task_ptr->set_enable(true);
}
else {
shop_ref = nullptr;
m_shopping_task_ptr->set_enable(false);
}
return true;
}

View File

@@ -1,9 +1,14 @@
#include "PackageTask.h"
#include "Resource.h"
#include "Logger.hpp"
bool asst::PackageTask::run()
{
if (!m_enable) {
Log.info("task is disable, pass", basic_info().to_string());
return true;
}
m_runned = true;
const auto task_delay = Resrc.cfg().get_options().task_delay;
@@ -12,9 +17,6 @@ bool asst::PackageTask::run()
if (need_exit()) {
return false;
}
if (!task_ptr) {
continue;
}
task_ptr->set_exit_flag(m_exit_flag)
.set_ctrler(m_ctrler)

View File

@@ -30,6 +30,10 @@ asst::ProcessTask::ProcessTask(AbstractTask&& abs, std::vector<std::string> task
bool asst::ProcessTask::run()
{
if (!m_enable) {
Log.info("task is disable, pass", basic_info().to_string());
return true;
}
m_cur_tasks_name = m_raw_tasks_name;
for (m_cur_retry = 0; m_cur_retry <= m_retry_times; ++m_cur_retry) {
if (_run()) {

View File

@@ -9,7 +9,7 @@ asst::RecruitTask::RecruitTask(AsstCallback callback, void* callback_arg)
m_recruit_task_ptr(std::make_shared<AutoRecruitTask>(callback, callback_arg, TaskType))
{
m_recruit_begin_task_ptr->set_tasks({ "RecruitBegin" });
m_subtasks.emplace_back(nullptr); // reversed for m_recruit_begin_task_ptr
m_subtasks.emplace_back(m_recruit_begin_task_ptr);
m_subtasks.emplace_back(m_recruit_task_ptr);
}
@@ -19,14 +19,15 @@ bool asst::RecruitTask::set_params(const json::value& params)
|| !params.contains("confirm") || !params.at("confirm").is_array()) {
return false;
}
std::vector<int> select;
std::vector<int> select;
for (const auto& select_num_json : params.at("select").as_array()) {
if (!select_num_json.is_number()) {
return false;
}
select.emplace_back(select_num_json.as_integer());
}
std::vector<int> confirm;
for (const auto& confirm_num_json : params.at("confirm").as_array()) {
if (!confirm_num_json.is_number()) {
@@ -40,11 +41,11 @@ bool asst::RecruitTask::set_params(const json::value& params)
bool expedite = params.get("expedite", false);
[[maybe_unused]] int expedite_times = params.get("expedite_times", 0);
if (times == 0 || confirm.empty()) { // 仅识别的情况
m_subtasks.at(0) = nullptr;
if (times <= 0 || confirm.empty()) { // 仅识别的情况
m_recruit_begin_task_ptr->set_enable(false);
}
else {
m_subtasks.at(0) = m_recruit_begin_task_ptr;
m_recruit_begin_task_ptr->set_enable(true);
}
m_recruit_task_ptr->set_max_times(times)
@@ -53,5 +54,5 @@ bool asst::RecruitTask::set_params(const json::value& params)
.set_select_level(std::move(select))
.set_confirm_level(std::move(confirm));
return false;
return true;
}