更新任务处理

This commit is contained in:
MistEO
2021-08-05 18:04:20 +08:00
parent 2de30dda5e
commit 062f190597
3 changed files with 45 additions and 32 deletions

View File

@@ -51,6 +51,7 @@ namespace asst {
static void task_callback(TaskMsg msg, const json::value& detail, void* custom_arg);
void append_match_task(const std::vector<std::string>& tasks);
void append_task(const json::value& detail);
void clear_exec_times();
std::shared_ptr<WinMacro> m_window_ptr = nullptr;

View File

@@ -237,48 +237,28 @@ void Assistance::task_callback(TaskMsg msg, const json::value& detail, void* cus
DebugTrace(msg, detail.to_string());
Assistance* p_this = (Assistance*)custom_arg;
json::value more_detail = detail;
switch (msg)
{
case TaskMsg::ReadyToSleep:
case TaskMsg::PtrIsNull:
case TaskMsg::ImageIsEmpty:
p_this->stop(false);
break;
case TaskMsg::EndOfSleep:
case TaskMsg::WindowMinimized:
p_this->m_window_ptr->showWindow();
break;
case TaskMsg::AppendMatchTask:
{
std::vector<std::string> next_vec;
if (detail.exist("tasks")) {
json::array next_arr = detail.at("tasks").as_array();
for (const json::value& next_json : next_arr) {
next_vec.emplace_back(next_json.as_string());
}
}
else if (detail.exist("task")) {
next_vec.emplace_back(detail.at("task").as_string());
}
if (next_vec.size() == 1 && next_vec.at(0) == "Stop") {
break;
}
p_this->append_match_task(next_vec);
}
break;
more_detail["type"] = "MatchTask";
[[fallthrough]];
case TaskMsg::AppendTask:
{
std::string task = detail.at("type").as_string();
if (task == "ClickTask") {
auto task_ptr = std::make_shared<ClickTask>(task_callback, custom_arg);
json::array rect_json = detail.at("rect").as_array();
Rect rect(rect_json[0].as_integer(), rect_json[1].as_integer(), rect_json[2].as_integer(), rect_json[3].as_integer());
task_ptr->set_rect(std::move(rect));
p_this->m_tasks_queue.emplace(task_ptr);
} // else if // TODO
}
break;
p_this->append_task(more_detail);
break;
default:
break;
}
if (p_this->m_callback) {
p_this->m_callback(msg, detail, p_this->m_callback_arg);
p_this->m_callback(msg, more_detail, p_this->m_callback_arg);
}
}
@@ -289,6 +269,32 @@ void asst::Assistance::append_match_task(const std::vector<std::string>& tasks)
m_tasks_queue.emplace(task_ptr);
}
void asst::Assistance::append_task(const json::value& detail)
{
std::string task_type = detail.at("type").as_string();
if (task_type == "ClickTask") {
auto task_ptr = std::make_shared<ClickTask>(task_callback, (void*)this);
json::array rect_json = detail.at("rect").as_array();
Rect rect(rect_json[0].as_integer(), rect_json[1].as_integer(), rect_json[2].as_integer(), rect_json[3].as_integer());
task_ptr->set_rect(std::move(rect));
m_tasks_queue.emplace(task_ptr);
}
else if (task_type == "MatchTask") {
std::vector<std::string> next_vec;
if (detail.exist("tasks")) {
json::array next_arr = detail.at("tasks").as_array();
for (const json::value& next_json : next_arr) {
next_vec.emplace_back(next_json.as_string());
}
}
else if (detail.exist("task")) {
next_vec.emplace_back(detail.at("task").as_string());
}
append_match_task(next_vec);
}
// else if // TODO
}
void Assistance::clear_exec_times()
{
for (auto&& pair : Configer::get_instance().m_all_tasks_info) {

View File

@@ -168,6 +168,7 @@ bool MatchTask::run()
// 前置固定延时
sleep(task.pre_delay);
bool need_stop = false;
switch (task.type) {
case MatchTaskType::ClickRect:
rect = task.specific_area;
@@ -179,6 +180,7 @@ bool MatchTask::run()
break;
case MatchTaskType::Stop:
m_callback(TaskMsg::MissionStop, json::value(), m_callback_arg);
need_stop = true;
break;
case MatchTaskType::PrintWindow:
{
@@ -200,6 +202,10 @@ bool MatchTask::run()
--Configer::get_instance().m_all_tasks_info[reduce].exec_times;
}
if (need_stop) {
return true;
}
// 后置固定延时
sleep(task.rear_delay);