mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-17 10:00:44 +08:00
feat: 为controller添加退出标记
fix https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/1277
This commit is contained in:
@@ -35,6 +35,7 @@ Assistant::Assistant(AsstApiCallback callback, void* callback_arg)
|
||||
|
||||
m_status = std::make_shared<RuntimeStatus>();
|
||||
m_ctrler = std::make_shared<Controller>(task_callback, static_cast<void*>(this));
|
||||
m_ctrler->set_exit_flag(&m_thread_idle);
|
||||
|
||||
m_working_thread = std::thread(&Assistant::working_proc, this);
|
||||
m_msg_thread = std::thread(&Assistant::msg_proc, this);
|
||||
|
||||
@@ -212,6 +212,11 @@ std::pair<int, int> asst::Controller::get_scale_size() const noexcept
|
||||
return m_scale_size;
|
||||
}
|
||||
|
||||
bool asst::Controller::need_exit() const
|
||||
{
|
||||
return m_exit_flag != nullptr && *m_exit_flag;
|
||||
}
|
||||
|
||||
void asst::Controller::pipe_working_proc()
|
||||
{
|
||||
LogTraceFunction;
|
||||
@@ -377,6 +382,9 @@ std::optional<std::vector<uchar>> asst::Controller::call_command(const std::stri
|
||||
}} };
|
||||
constexpr static int ReconnectTimes = 20;
|
||||
for (int i = 0; i < ReconnectTimes; ++i) {
|
||||
if (need_exit()) {
|
||||
break;
|
||||
}
|
||||
reconnect_info["details"]["times"] = i;
|
||||
m_callback(AsstMsg::ConnectionInfo, reconnect_info, m_callback_arg);
|
||||
|
||||
@@ -540,6 +548,9 @@ std::optional<unsigned short> asst::Controller::try_to_init_socket(const std::st
|
||||
|
||||
u_short max_port = try_port + try_times;
|
||||
for (u_short port = try_port; port < max_port; ++port) {
|
||||
if (need_exit()) {
|
||||
break;
|
||||
}
|
||||
Log.trace("try to bind port", port);
|
||||
|
||||
#ifdef _WIN32
|
||||
@@ -1202,6 +1213,9 @@ bool asst::Controller::inited() const noexcept
|
||||
return m_inited;
|
||||
}
|
||||
|
||||
void asst::Controller::set_exit_flag(bool* flag)
|
||||
{}
|
||||
|
||||
const std::string& asst::Controller::get_uuid() const
|
||||
{
|
||||
return m_uuid;
|
||||
@@ -1218,6 +1232,9 @@ cv::Mat asst::Controller::get_image(bool raw)
|
||||
constexpr static int MaxTryCount = 20;
|
||||
bool success = false;
|
||||
for (int i = 0; i < MaxTryCount && m_inited; ++i) {
|
||||
if (need_exit()) {
|
||||
break;
|
||||
}
|
||||
if (screencap()) {
|
||||
success = true;
|
||||
break;
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace asst
|
||||
bool connect(const std::string& adb_path, const std::string& address, const std::string& config);
|
||||
bool release();
|
||||
bool inited() const noexcept;
|
||||
void set_exit_flag(bool* flag);
|
||||
|
||||
const std::string& get_uuid() const;
|
||||
cv::Mat get_image(bool raw = false);
|
||||
@@ -66,6 +67,7 @@ namespace asst
|
||||
Controller& operator=(Controller&&) = delete;
|
||||
|
||||
private:
|
||||
bool need_exit() const;
|
||||
void pipe_working_proc();
|
||||
std::optional<std::vector<uchar>> call_command(const std::string& cmd, int64_t timeout = 20000, bool recv_by_socket = false);
|
||||
int push_cmd(const std::string& cmd);
|
||||
@@ -86,6 +88,7 @@ namespace asst
|
||||
// 转换data中所有的crlf为lf:有些模拟器自带的adb,exec-out输出的\n,会被替换成\r\n,导致解码错误,所以这里转一下回来(点名批评mumu)
|
||||
static void convert_lf(std::vector<uchar>& data);
|
||||
|
||||
bool* m_exit_flag = nullptr;
|
||||
AsstCallback m_callback;
|
||||
void* m_callback_arg = nullptr;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user