refactor.解耦关卡掉落相关任务,插件化

This commit is contained in:
MistEO
2022-01-09 00:42:48 +08:00
parent 8d2d458e76
commit fd521f6e6c
24 changed files with 351 additions and 234 deletions

View File

@@ -10,6 +10,7 @@
#include "Controller.h"
#include "Logger.hpp"
#include "Resource.h"
#include "AbstractTaskPlugin.h"
using namespace asst;
@@ -23,10 +24,10 @@ AbstractTask::AbstractTask(AsstCallback callback, void* callback_arg, std::strin
bool asst::AbstractTask::run()
{
m_callback(AsstMsg::SubTaskStart, basic_info(), m_callback_arg);
callback(AsstMsg::SubTaskStart, basic_info());
for (m_cur_retry = 0; m_cur_retry < m_retry_times; ++m_cur_retry) {
if (_run()) {
m_callback(AsstMsg::SubTaskCompleted, basic_info(), m_callback_arg);
callback(AsstMsg::SubTaskCompleted, basic_info());
return true;
}
if (need_exit()) {
@@ -36,11 +37,11 @@ bool asst::AbstractTask::run()
sleep(delay);
if (!on_run_fails()) {
m_callback(AsstMsg::SubTaskError, basic_info(), m_callback_arg);
callback(AsstMsg::SubTaskError, basic_info());
return false;
}
}
m_callback(AsstMsg::SubTaskError, basic_info(), m_callback_arg);
callback(AsstMsg::SubTaskError, basic_info());
return false;
}
@@ -56,6 +57,11 @@ AbstractTask& asst::AbstractTask::set_retry_times(int times) noexcept
return *this;
}
void asst::AbstractTask::clear_plugin() noexcept
{
m_plugins.clear();
}
json::value asst::AbstractTask::basic_info() const
{
return json::object{
@@ -99,7 +105,7 @@ bool AbstractTask::save_image(const cv::Mat image, const std::string& dir)
bool ret = cv::imwrite(filename, image);
return true;
return ret;
}
bool asst::AbstractTask::need_exit() const
@@ -107,6 +113,24 @@ bool asst::AbstractTask::need_exit() const
return m_exit_flag != nullptr && *m_exit_flag == true;
}
void asst::AbstractTask::callback(AsstMsg msg, const json::value& detail)
{
for (TaskPluginPtr plugin : m_plugins) {
plugin->set_plugin_exit_flag(m_exit_flag);
if (!plugin->verify(msg, detail)) {
continue;
}
plugin->run(this);
if (plugin->block()) {
break;
}
}
m_callback(msg, detail, m_callback_arg);
}
void asst::AbstractTask::click_return_button()
{
LogTraceFunction;