#pragma once #include #include #include #include #include #include #include #include "AsstDef.h" #include "AsstAux.h" namespace cv { class Mat; } namespace json { class value; } namespace asst { class WinMacro; class Identify; class Configer; class RecruitConfiger; enum class TaskMsg { /* Error Msg */ PtrIsNull, ImageIsEmpty, WindowMinimized, /* Info Msg */ TaskMatched, ReachedLimit, ReadyToSleep, AppendTask, TaskCompleted, MissionStop, /* Open Recruit Msg */ DetectText, DetectTags, RecruitCombs }; static std::ostream& operator<<(std::ostream& os, const TaskMsg& type) { static const std::unordered_map _type_name = { {TaskMsg::PtrIsNull, "PtrIsNull"}, {TaskMsg::ImageIsEmpty, "ImageIsEmpty"}, {TaskMsg::WindowMinimized, "WindowMinimized"}, {TaskMsg::TaskMatched, "TaskMatched"}, {TaskMsg::ReachedLimit, "ReachedLimit"}, {TaskMsg::ReadyToSleep, "ReadyToSleep"}, {TaskMsg::AppendTask, "AppendTask"}, {TaskMsg::TaskCompleted, "TaskCompleted"}, {TaskMsg::MissionStop, "MissionStop"}, {TaskMsg::DetectText, "DetectText"}, {TaskMsg::DetectTags, "DetectTags"}, {TaskMsg::RecruitCombs, "RecruitCombs"} }; return os << _type_name.at(type); } using TaskCallback = std::function; class AbstractTask { public: AbstractTask(TaskCallback callback, void* callback_arg); ~AbstractTask() = default; AbstractTask(const AbstractTask&) = default; AbstractTask(AbstractTask&&) = default; virtual void set_ptr( std::shared_ptr window_ptr, std::shared_ptr view_ptr, std::shared_ptr control_ptr, std::shared_ptr identify_ptr); virtual bool run() = 0; virtual void set_exit_flag(bool* exit_flag); protected: virtual cv::Mat get_format_image(); virtual bool set_control_scale(int cur_width, int cur_height); virtual void sleep(unsigned millisecond); std::shared_ptr m_window_ptr = nullptr; std::shared_ptr m_view_ptr = nullptr; std::shared_ptr m_control_ptr = nullptr; std::shared_ptr m_identify_ptr = nullptr; TaskCallback m_callback; void* m_callback_arg = NULL; bool* m_exit_flag = NULL; }; class MatchTask : public AbstractTask { public: MatchTask(TaskCallback callback, void* callback_arg, std::unordered_map* all_tasks_ptr, Configer* configer_ptr); virtual bool run() override; virtual void set_tasks(const std::vector& cur_tasks_name) { m_cur_tasks_name = cur_tasks_name; } protected: bool match_image(TaskInfo * task_info, asst::Rect* matched_rect = NULL); void exec_click_task(TaskInfo& task, const asst::Rect& matched_rect); std::unordered_map* m_all_tasks_ptr = NULL; Configer* m_configer_ptr = NULL; std::vector m_cur_tasks_name; }; class OcrAbstractTask : public AbstractTask { public: OcrAbstractTask(TaskCallback callback, void* callback_arg); virtual bool run() override = 0 ; protected: std::vector