From e7b3b644c2c67006cfe26db0ff0dd5bc1234d42f Mon Sep 17 00:00:00 2001 From: MistEO Date: Sun, 28 Nov 2021 00:24:05 +0800 Subject: [PATCH] =?UTF-8?q?feat.=E5=AF=B9=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=BA=9B=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistance/Assistance.cpp | 1 + src/MeoAssistance/TaskData.cpp | 30 +++++++++++++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/MeoAssistance/Assistance.cpp b/src/MeoAssistance/Assistance.cpp index e972c3c826..10cb699fe0 100644 --- a/src/MeoAssistance/Assistance.cpp +++ b/src/MeoAssistance/Assistance.cpp @@ -40,6 +40,7 @@ Assistance::Assistance(AsstCallback callback, void* callback_arg) callback_json["type"] = "resource broken"; callback_json["what"] = error; m_callback(AsstMsg::InitFaild, callback_json, m_callback_arg); + throw error; } m_working_thread = std::thread(std::bind(&Assistance::working_proc, this)); diff --git a/src/MeoAssistance/TaskData.cpp b/src/MeoAssistance/TaskData.cpp index bf4331f256..1f9178e1c3 100644 --- a/src/MeoAssistance/TaskData.cpp +++ b/src/MeoAssistance/TaskData.cpp @@ -147,12 +147,18 @@ bool asst::TaskData::parse(const json::value& json) } } if (task_json.exist("roi")) { - const json::array& area_arr = task_json.at("roi").as_array(); - task_info_ptr->roi = Rect( - area_arr[0].as_integer(), - area_arr[1].as_integer(), - area_arr[2].as_integer(), - area_arr[3].as_integer()); + const json::array& area_arr = task_json.at("roi").as_array(); + int x = area_arr[0].as_integer(); + int y = area_arr[1].as_integer(); + int width = area_arr[2].as_integer(); + int height = area_arr[3].as_integer(); +#ifdef LOG_TRACE + if (x + width > WindowWidthDefault || y + height > WindowHeightDefault) { + m_last_error = name + " roi is out of bounds"; + return false; + } +#endif + task_info_ptr->roi = Rect(x, y, width, height); } else { task_info_ptr->roi = Rect(); @@ -176,6 +182,16 @@ bool asst::TaskData::parse(const json::value& json) } m_all_tasks_info.emplace(name, task_info_ptr); - } + } +#ifdef LOG_TRACE + for (const auto& [name, task] : m_all_tasks_info) { + for (const auto& next : task->next) { + if (m_all_tasks_info.find(next) == m_all_tasks_info.cend()) { + m_last_error = name + "'s next " + next + " is null"; + return false; + } + } + } +#endif return true; }