From ed36032af63340d88fa580e5cd7ca34f15d0438d Mon Sep 17 00:00:00 2001 From: MistEO Date: Tue, 7 Jun 2022 02:05:07 +0800 Subject: [PATCH] =?UTF-8?q?fix.=E4=BF=AE=E5=A4=8Dsocket=E4=B8=8D=E5=8F=AF?= =?UTF-8?q?=E7=94=A8=E6=97=B6=E9=98=BB=E5=A1=9E=E4=BD=8F=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/config.json | 2 +- src/MeoAssistant/Controller.cpp | 36 ++++++++++++++++++--------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/resource/config.json b/resource/config.json index 0f4e708ef3..49373a79cb 100644 --- a/resource/config.json +++ b/resource/config.json @@ -80,7 +80,7 @@ "swipe": "[Adb] -s [AdbSerial] shell input swipe [x1] [y1] [x2] [y2] [duration]", "display": "[Adb] -s [AdbSerial] shell dumpsys window displays | grep init= | awk ' { print $3 } '", "displayFormat": "cur=%dx%d", - "screencapRawByNC": "[Adb] -s [AdbSerial] exec-out \"screencap | nc -w 3 [NcAddress] [NcPort]\"", + "screencapRawByNC": "[Adb] -s [AdbSerial] shell \"screencap | nc -w 3 [NcAddress] [NcPort]\"", "ncPort": 6723, "screencapRawWithGzip": "[Adb] -s [AdbSerial] shell \"screencap | gzip -1\"", "screencapEncode": "[Adb] -s [AdbSerial] shell screencap -p", diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index bc8922dc25..31a164d436 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -279,20 +279,24 @@ std::optional> asst::Controller::call_command(const s } while (::WaitForSingleObject(process_info.hProcess, 0) == WAIT_TIMEOUT && !check_timeout()); } else { - SOCKADDR client_addr = { 0 }; - int size = sizeof(SOCKADDR); - SOCKET client_sock = ::accept(m_server_sock, (SOCKADDR*)&client_addr, &size); - int recv_size = 0; - do { - recv_size = ::recv(client_sock, (char*)m_socket_buffer.get(), SocketBuffSize, NULL); - if (recv_size < 0) { - Log.error("recv error", recv_size); - break; - } - pipe_data.insert(pipe_data.end(), m_socket_buffer.get(), m_socket_buffer.get() + recv_size); - } while (recv_size > 0 && !check_timeout()); - ::closesocket(client_sock); - ::WaitForSingleObject(process_info.hProcess, static_cast(timeout)); + fd_set fdset = { 0 }; + FD_SET(m_server_sock, &fdset); + timeval select_timeout = { 1, 0 }; + select(static_cast(m_server_sock) + 1, &fdset, NULL, NULL, &select_timeout); + if (FD_ISSET(m_server_sock, &fdset)) { + SOCKET client_sock = ::accept(m_server_sock, NULL, NULL); + int recv_size = 0; + do { + recv_size = ::recv(client_sock, (char*)m_socket_buffer.get(), SocketBuffSize, NULL); + if (recv_size < 0) { + Log.error("recv error", recv_size); + break; + } + pipe_data.insert(pipe_data.end(), m_socket_buffer.get(), m_socket_buffer.get() + recv_size); + } while (recv_size > 0 && !check_timeout()); + ::closesocket(client_sock); + } + ::WaitForSingleObject(process_info.hProcess, 3000); } DWORD exit_ret = 0; ::GetExitCodeProcess(process_info.hProcess, &exit_ret); @@ -407,7 +411,7 @@ asst::Point asst::Controller::rand_point_in_rect(const Rect& rect) y = y_rand + rect.y; } - return {x, y}; + return { x, y }; } void asst::Controller::random_delay() const @@ -682,7 +686,7 @@ cv::Mat asst::Controller::get_resized_image() const std::shared_lock image_lock(m_image_mutex); if (m_cache_image.empty()) { Log.error("image is empty"); - return {dsize, CV_8UC3}; + return { dsize, CV_8UC3 }; } cv::Mat resized_mat; cv::resize(m_cache_image, resized_mat, dsize, 0.0, 0.0, cv::INTER_AREA);