From 37c5be5dd0c77fa1af68a02b32a5504a47e9df7e Mon Sep 17 00:00:00 2001 From: MistEO Date: Thu, 12 Aug 2021 00:46:38 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=88=B6=E9=80=A0=E7=AB=99=E6=8D=A2=E7=8F=AD=E7=9A=84demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MeoAssistance/InfrastConfiger.cpp | 66 +++++++++ MeoAssistance/MeoAssistance.vcxproj | 13 +- MeoAssistance/MeoAssistance.vcxproj.filters | 80 ++++++----- MeoAssistance/include/Assistance.h | 3 + MeoAssistance/include/AsstCaller.h | 1 + MeoAssistance/include/AsstDef.h | 1 + MeoAssistance/include/Configer.h | 7 +- MeoAssistance/include/InfrastConfiger.h | 35 +++++ MeoAssistance/include/OpenRecruitConfiger.h | 39 ------ MeoAssistance/include/RecruitConfiger.h | 39 ++++++ MeoAssistance/include/Task.h | 2 +- MeoAssistance/include/WinMacro.h | 4 + MeoAssistance/src/Assistance.cpp | 15 +- MeoAssistance/src/AsstCaller.cpp | 10 +- MeoAssistance/src/Configer.cpp | 2 +- ...ecruitConfiger.cpp => RecruitConfiger.cpp} | 10 +- MeoAssistance/src/Task.cpp | 128 ++++++++++++++---- MeoAssistance/src/WinMacro.cpp | 66 +++++++-- Tools/TestCaller/TestCaller.vcxproj | 2 +- Tools/TestCaller/main.cpp | 24 +++- resource/config.json | 119 ++-------------- resource/infrast.json | 26 ++++ resource/{operInfo.json => recruit.json} | 0 23 files changed, 450 insertions(+), 242 deletions(-) create mode 100644 MeoAssistance/InfrastConfiger.cpp create mode 100644 MeoAssistance/include/InfrastConfiger.h delete mode 100644 MeoAssistance/include/OpenRecruitConfiger.h create mode 100644 MeoAssistance/include/RecruitConfiger.h rename MeoAssistance/src/{OpenRecruitConfiger.cpp => RecruitConfiger.cpp} (88%) create mode 100644 resource/infrast.json rename resource/{operInfo.json => recruit.json} (100%) diff --git a/MeoAssistance/InfrastConfiger.cpp b/MeoAssistance/InfrastConfiger.cpp new file mode 100644 index 0000000000..2cffe2172b --- /dev/null +++ b/MeoAssistance/InfrastConfiger.cpp @@ -0,0 +1,66 @@ +#include "InfrastConfiger.h" + +#include +#include + +#include +#include "Logger.hpp" + +using namespace asst; + +bool InfrastConfiger::load(const std::string& filename) +{ + DebugTraceFunction; + DebugTrace("Configer::load | ", filename); + + InfrastConfiger temp; + if (temp._load(filename)) { + *this = std::move(temp); + return true; + } + else { + return false; + } +} + +bool InfrastConfiger::_load(const std::string& filename) +{ + std::ifstream ifs(filename, std::ios::in); + if (!ifs.is_open()) { + return false; + } + std::stringstream iss; + iss << ifs.rdbuf(); + ifs.close(); + std::string content(iss.str()); + + auto&& ret = json::parser::parse(content); + if (!ret) { + DebugTrace("parse error", content); + return false; + } + + json::value root = ret.value(); + try { + // վ + for (json::value& comb_info : root["Manufacturing"]["combs"].as_array()) + { + std::vector comb_vec; + for (json::value& oper_name : comb_info["comb"].as_array()) + { + std::string oper_name_str = oper_name.as_string(); + m_mfg_opers.emplace(oper_name_str); + comb_vec.emplace_back(std::move(oper_name_str)); + } + m_mfg_combs.emplace_back(std::move(comb_vec)); + } + // óվ TODO + } + catch (json::exception& e) { + DebugTraceError("Load config json error!", e.what()); + return false; + } + DebugTrace("Load config succeed"); + + return true; +} \ No newline at end of file diff --git a/MeoAssistance/MeoAssistance.vcxproj b/MeoAssistance/MeoAssistance.vcxproj index 630f320157..cd0ef8ffbe 100644 --- a/MeoAssistance/MeoAssistance.vcxproj +++ b/MeoAssistance/MeoAssistance.vcxproj @@ -26,25 +26,28 @@ + - + + - + - + + @@ -155,7 +158,7 @@ true true true - NDEBUG;_CONSOLE;CSHARP_API;MEO_DLL_EXPORTS;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;MEO_DLL_EXPORTS;%(PreprocessorDefinitions) true stdcpp17 stdc11 @@ -196,7 +199,7 @@ xcopy /e /y /i $(SolutionDir)3rdPart\resource $(TargetDir)resource false true - NDEBUG;_CONSOLE;CSHARP_API;MEO_DLL_EXPORTS;LOG_TRACE;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;MEO_DLL_EXPORTS;LOG_TRACE;DEBUG_API;%(PreprocessorDefinitions) true stdcpp17 stdc11 diff --git a/MeoAssistance/MeoAssistance.vcxproj.filters b/MeoAssistance/MeoAssistance.vcxproj.filters index 8c07d230c9..f09ac5310a 100644 --- a/MeoAssistance/MeoAssistance.vcxproj.filters +++ b/MeoAssistance/MeoAssistance.vcxproj.filters @@ -13,20 +13,23 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + {07a812fe-6b28-4be0-b6d4-33554824d3c5} + + + {74bd94e1-4973-412a-a17a-d8457de387af} + + + {87c9dee5-847b-41e6-818e-387a6385ea8b} + - - 头文件 - 头文件 头文件 - - 头文件 - 头文件 @@ -36,32 +39,35 @@ 头文件 - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - - - 头文件 - 头文件 + + 头文件\configer + + + 头文件\configer + + + 头文件\configer + + + 头文件\type + + + 头文件\type + + + 头文件\type + + + 头文件\type + + + 头文件\type + - - 源文件 - - - 源文件 - 源文件 @@ -74,18 +80,30 @@ 源文件 - - 源文件 - 源文件 + + 源文件\configer + + + 源文件 + + + 源文件\configer + + + 源文件\configer + 资源文件 - + + 资源文件 + + 资源文件 diff --git a/MeoAssistance/include/Assistance.h b/MeoAssistance/include/Assistance.h index 7dcdfcaa4a..e6cf6f1680 100644 --- a/MeoAssistance/include/Assistance.h +++ b/MeoAssistance/include/Assistance.h @@ -43,6 +43,9 @@ namespace asst { bool set_param(const std::string& type, const std::string& param, const std::string& value); + // + bool swipe(const Point& p1, const Point& p2); + static constexpr int ProcessTaskRetryTimesDefault = 20; static constexpr int OpenRecruitTaskRetyrTimesDefault = 5; diff --git a/MeoAssistance/include/AsstCaller.h b/MeoAssistance/include/AsstCaller.h index 5b057d3248..d063218e65 100644 --- a/MeoAssistance/include/AsstCaller.h +++ b/MeoAssistance/include/AsstCaller.h @@ -22,6 +22,7 @@ extern "C" { MEOAPI_PORT bool CheckVersionUpdate(char* tag_buffer, int tag_bufsize, char* html_url_buffer, int html_bufsize, char* body_buffer, int body_bufsize); + MEOAPI_PORT bool AsstTestSwipe(asst::Assistance* p_asst, int x1, int y1, int x2, int y2); #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/MeoAssistance/include/AsstDef.h b/MeoAssistance/include/AsstDef.h index e5ce23a76f..e0d1e190d0 100644 --- a/MeoAssistance/include/AsstDef.h +++ b/MeoAssistance/include/AsstDef.h @@ -103,6 +103,7 @@ namespace asst { std::string path; std::string connect; std::string click; + std::string swipe; std::string display; std::string display_regex; int display_width = 0; diff --git a/MeoAssistance/include/Configer.h b/MeoAssistance/include/Configer.h index 2705c135ba..bf4e006cef 100644 --- a/MeoAssistance/include/Configer.h +++ b/MeoAssistance/include/Configer.h @@ -2,7 +2,6 @@ #include #include -#include #include #include "AsstDef.h" @@ -22,9 +21,6 @@ namespace asst { bool set_param(const std::string& type, const std::string& param, const std::string& value); - Configer& operator=(const Configer& rhs) = default; - Configer& operator=(Configer&& rhs) noexcept = default; - constexpr static int DefaultWindowWidth = 1280; constexpr static int DefaultWindowHeight = 720; constexpr static double Defaulttempl_threshold = 0.9; @@ -42,6 +38,9 @@ namespace asst { Configer(const Configer& rhs) = default; Configer(Configer&& rhs) noexcept = default; + Configer& operator=(const Configer& rhs) = default; + Configer& operator=(Configer && rhs) noexcept = default; + bool _load(const std::string& filename); }; } diff --git a/MeoAssistance/include/InfrastConfiger.h b/MeoAssistance/include/InfrastConfiger.h new file mode 100644 index 0000000000..b9c0e62582 --- /dev/null +++ b/MeoAssistance/include/InfrastConfiger.h @@ -0,0 +1,35 @@ +#pragma once + +#include +#include +#include + +#include "AsstDef.h" + +namespace asst { + class InfrastConfiger + { + public: + ~InfrastConfiger() = default; + + static InfrastConfiger& get_instance() { + static InfrastConfiger unique_instance; + return unique_instance; + } + + bool load(const std::string& filename); + + std::vector> m_mfg_combs; // վ + std::unordered_set m_mfg_opers; // վиԱ + + private: + InfrastConfiger() = default; + InfrastConfiger(const InfrastConfiger& rhs) = default; + InfrastConfiger(InfrastConfiger&& rhs) noexcept = default; + + InfrastConfiger& operator=(const InfrastConfiger& rhs) = default; + InfrastConfiger& operator=(InfrastConfiger && rhs) noexcept = default; + + bool _load(const std::string& filename); + }; +} diff --git a/MeoAssistance/include/OpenRecruitConfiger.h b/MeoAssistance/include/OpenRecruitConfiger.h deleted file mode 100644 index aea6f1e779..0000000000 --- a/MeoAssistance/include/OpenRecruitConfiger.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "AsstDef.h" - -namespace asst { - class OpenRecruitConfiger - { - public: - ~OpenRecruitConfiger() = default; - - static OpenRecruitConfiger& get_instance() { - static OpenRecruitConfiger unique_instance; - return unique_instance; - } - - bool load(const std::string& filename); - - OpenRecruitConfiger& operator=(const OpenRecruitConfiger& rhs) = default; - OpenRecruitConfiger& operator=(OpenRecruitConfiger&& rhs) noexcept = default; - - std::unordered_set m_all_tags; - std::unordered_set m_all_types; - - std::vector m_all_opers; - - constexpr static int CorrectNumberOfTags = 5; - - private: - OpenRecruitConfiger() = default; - OpenRecruitConfiger(const OpenRecruitConfiger& rhs) = default; - OpenRecruitConfiger(OpenRecruitConfiger&& rhs) noexcept = default; - - bool _load(const std::string& filename); - }; -} \ No newline at end of file diff --git a/MeoAssistance/include/RecruitConfiger.h b/MeoAssistance/include/RecruitConfiger.h new file mode 100644 index 0000000000..c5ac2f3d6a --- /dev/null +++ b/MeoAssistance/include/RecruitConfiger.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include +#include + +#include "AsstDef.h" + +namespace asst { + class RecruitConfiger + { + public: + ~RecruitConfiger() = default; + + static RecruitConfiger& get_instance() { + static RecruitConfiger unique_instance; + return unique_instance; + } + + bool load(const std::string& filename); + + std::unordered_set m_all_tags; + std::unordered_set m_all_types; + + std::vector m_all_opers; + + constexpr static int CorrectNumberOfTags = 5; + + private: + RecruitConfiger() = default; + RecruitConfiger(const RecruitConfiger& rhs) = default; + RecruitConfiger(RecruitConfiger&& rhs) noexcept = default; + + RecruitConfiger& operator=(const RecruitConfiger& rhs) = default; + RecruitConfiger& operator=(RecruitConfiger && rhs) noexcept = default; + + bool _load(const std::string& filename); + }; +} \ No newline at end of file diff --git a/MeoAssistance/include/Task.h b/MeoAssistance/include/Task.h index a25cfac7d1..efb37f8207 100644 --- a/MeoAssistance/include/Task.h +++ b/MeoAssistance/include/Task.h @@ -25,7 +25,7 @@ namespace asst { class WinMacro; class Identify; class Configer; - class OpenRecruitConfiger; + class RecruitConfiger; enum TaskType { TaskTypeInvalid = 0, diff --git a/MeoAssistance/include/WinMacro.h b/MeoAssistance/include/WinMacro.h index 34c2a654a4..1170a99a5d 100644 --- a/MeoAssistance/include/WinMacro.h +++ b/MeoAssistance/include/WinMacro.h @@ -25,6 +25,8 @@ namespace asst { bool hideWindow(); bool click(const Point& p); bool click(const Rect& rect); + bool swipe(const Point& p1, const Point& p2); + bool swipe(const Rect& r1, const Rect& r2); void setControlScale(double scale); cv::Mat getImage(const Rect& rect); Rect getWindowRect(); @@ -35,12 +37,14 @@ namespace asst { private: bool findHandle(); std::optional callCmd(const std::string& cmd, bool use_pipe = true); + Point randPointInRect(const Rect& rect); const EmulatorInfo m_emulator_info; const HandleType m_handle_type; HWND m_handle = NULL; bool m_is_adb = false; std::string m_click_cmd; // adbadbľò + std::string m_swipe_cmd; // adbadbľò std::minstd_rand m_rand_engine; int m_width = 0; int m_height = 0; diff --git a/MeoAssistance/src/Assistance.cpp b/MeoAssistance/src/Assistance.cpp index 9588d2d0fe..916b61b022 100644 --- a/MeoAssistance/src/Assistance.cpp +++ b/MeoAssistance/src/Assistance.cpp @@ -6,7 +6,8 @@ #include "Logger.hpp" #include "AsstAux.h" #include "Task.h" -#include "OpenRecruitConfiger.h" +#include "RecruitConfiger.h" +#include "InfrastConfiger.h" #include #include @@ -33,7 +34,12 @@ Assistance::Assistance(AsstCallback callback, void* callback_arg) callback_error(); return; } - ret = OpenRecruitConfiger::get_instance().load(GetResourceDir() + "operInfo.json"); + ret = RecruitConfiger::get_instance().load(GetResourceDir() + "recruit.json"); + if (!ret) { + callback_error(); + return; + } + ret = InfrastConfiger::get_instance().load(GetResourceDir() + "infrast.json"); if (!ret) { callback_error(); return; @@ -234,6 +240,11 @@ bool Assistance::set_param(const std::string& type, const std::string& param, co return Configer::get_instance().set_param(type, param, value); } +bool asst::Assistance::swipe(const Point& p1, const Point& p2) +{ + return m_control_ptr->swipe(p1, p2); +} + void Assistance::working_proc(Assistance* p_this) { DebugTraceFunction; diff --git a/MeoAssistance/src/AsstCaller.cpp b/MeoAssistance/src/AsstCaller.cpp index 03254d893f..eda8d53193 100644 --- a/MeoAssistance/src/AsstCaller.cpp +++ b/MeoAssistance/src/AsstCaller.cpp @@ -139,4 +139,12 @@ bool CheckVersionUpdate(char* tag_buffer, int tag_bufsize, char* html_url_buffer strcpy_s(html_url_buffer, html_bufsize, info.html_url.c_str()); strcpy_s(body_buffer, body_bufsize, info.body.c_str()); return true; -} \ No newline at end of file +} + +bool AsstTestSwipe(asst::Assistance* p_asst, int x1, int y1, int x2, int y2) +{ + if (p_asst == NULL) { + return false; + } + return p_asst->swipe({ x1, y1 }, { x2, y2 }); +} diff --git a/MeoAssistance/src/Configer.cpp b/MeoAssistance/src/Configer.cpp index b72408d410..42b0b862b8 100644 --- a/MeoAssistance/src/Configer.cpp +++ b/MeoAssistance/src/Configer.cpp @@ -250,10 +250,10 @@ bool asst::Configer::_load(const std::string& filename) } if (emulator_json.exist("adb")) { emulator_info.is_adb = true; - std::cout << emulator_json.to_string() << std::endl; emulator_info.adb.path = emulator_json["adb"]["path"].as_string(); emulator_info.adb.connect = emulator_json["adb"]["connect"].as_string(); emulator_info.adb.click = emulator_json["adb"]["click"].as_string(); + emulator_info.adb.swipe = emulator_json["adb"]["swipe"].as_string(); emulator_info.adb.display = emulator_json["adb"]["display"].as_string(); emulator_info.adb.display_regex = emulator_json["adb"]["displayRegex"].as_string(); } diff --git a/MeoAssistance/src/OpenRecruitConfiger.cpp b/MeoAssistance/src/RecruitConfiger.cpp similarity index 88% rename from MeoAssistance/src/OpenRecruitConfiger.cpp rename to MeoAssistance/src/RecruitConfiger.cpp index e2c2681cf8..1e84a69d25 100644 --- a/MeoAssistance/src/OpenRecruitConfiger.cpp +++ b/MeoAssistance/src/RecruitConfiger.cpp @@ -1,4 +1,4 @@ -#include "OpenRecruitConfiger.h" +#include "RecruitConfiger.h" #include #include @@ -9,12 +9,12 @@ using namespace asst; -bool OpenRecruitConfiger::load(const std::string& filename) +bool RecruitConfiger::load(const std::string& filename) { DebugTraceFunction; - DebugTrace("OpenRecruitConfiger::load | ", filename); + DebugTrace("RecruitConfiger::load | ", filename); - OpenRecruitConfiger temp; + RecruitConfiger temp; if (temp._load(filename)) { // ԱȼŸ std::sort(temp.m_all_opers.begin(), temp.m_all_opers.end(), []( @@ -31,7 +31,7 @@ bool OpenRecruitConfiger::load(const std::string& filename) } } -bool asst::OpenRecruitConfiger::_load(const std::string& filename) +bool asst::RecruitConfiger::_load(const std::string& filename) { std::ifstream ifs(filename, std::ios::in); if (!ifs.is_open()) { diff --git a/MeoAssistance/src/Task.cpp b/MeoAssistance/src/Task.cpp index b1def43eb3..cd92de8f0b 100644 --- a/MeoAssistance/src/Task.cpp +++ b/MeoAssistance/src/Task.cpp @@ -3,7 +3,8 @@ #include "WinMacro.h" #include "Identify.h" #include "Configer.h" -#include "OpenRecruitConfiger.h" +#include "RecruitConfiger.h" +#include "InfrastConfiger.h" #include #include "AsstAux.h" @@ -13,6 +14,7 @@ #include #include #include +#include using namespace asst; @@ -428,7 +430,7 @@ bool OpenRecruitTask::run() /* Filter out all tags from all text */ std::vector