From f9b31f420ec1d918a5372ccfd5bcfae63eacb6ff Mon Sep 17 00:00:00 2001 From: Barry <870709864@qq.com> Date: Thu, 22 Nov 2018 22:31:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DtunnelForward=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QtScrcpy/server/server.cpp | 84 +++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/QtScrcpy/server/server.cpp b/QtScrcpy/server/server.cpp index 3112a0d..e76e7f0 100644 --- a/QtScrcpy/server/server.cpp +++ b/QtScrcpy/server/server.cpp @@ -178,49 +178,53 @@ bool Server::connectTo() return true; } - QString deviceName; - QSize deviceSize; - bool success = false; + // device server need time to start + QTimer::singleShot(600, this, [this](){ + QString deviceName; + QSize deviceSize; + bool success = false; - m_deviceSocket = new DeviceSocket(); + m_deviceSocket = new DeviceSocket(); - // wait for devices server start - m_deviceSocket->connectToHost(QHostAddress::LocalHost, m_localPort); - if (!m_deviceSocket->waitForConnected(1000)) { - stop(); - qWarning("connect to server failed"); - emit connectToResult(false, "", QSize()); - return false; - } - if (QTcpSocket::ConnectedState == m_deviceSocket->state()) { - // connect will success even if devices offline, recv data is real connect success - // because connect is to pc adb server - m_deviceSocket->waitForReadyRead(1000); - QByteArray data = m_deviceSocket->read(1); - if (!data.isEmpty() && readInfo(deviceName, deviceSize)) { - success = true; + // wait for devices server start + m_deviceSocket->connectToHost(QHostAddress::LocalHost, m_localPort); + if (!m_deviceSocket->waitForConnected(1000)) { + stop(); + qWarning("connect to server failed"); + emit connectToResult(false, "", QSize()); + return false; + } + if (QTcpSocket::ConnectedState == m_deviceSocket->state()) { + // connect will success even if devices offline, recv data is real connect success + // because connect is to pc adb server + m_deviceSocket->waitForReadyRead(1000); + QByteArray data = m_deviceSocket->read(1); + if (!data.isEmpty() && readInfo(deviceName, deviceSize)) { + success = true; + } else { + qWarning("connect to server read device info failed"); + success = false; + } } else { - qWarning("connect to server read device info failed"); + qWarning("connect to server failed"); + m_deviceSocket->deleteLater(); success = false; } - } else { - qWarning("connect to server failed"); - m_deviceSocket->deleteLater(); - success = false; - } - if (success) { - // the server is started, we can clean up the jar from the temporary folder - removeServer(); - m_serverCopiedToDevice = false; - // we don't need the adb tunnel anymore - disableTunnelForward(); - m_tunnelEnabled = false; - } else { - stop(); - } - emit connectToResult(success, deviceName, deviceSize); - return success; + if (success) { + // the server is started, we can clean up the jar from the temporary folder + removeServer(); + m_serverCopiedToDevice = false; + // we don't need the adb tunnel anymore + disableTunnelForward(); + m_tunnelEnabled = false; + } else { + stop(); + } + emit connectToResult(success, deviceName, deviceSize); + }); + + return true; } void Server::timerEvent(QTimerEvent *event) @@ -354,7 +358,13 @@ void Server::onWorkProcessResult(AdbProcess::ADB_EXEC_RESULT processResult) case SSS_PUSH: if (AdbProcess::AER_SUCCESS_EXEC == processResult) { m_serverCopiedToDevice = true; +#if 1 m_serverStartStep = SSS_ENABLE_TUNNEL_REVERSE; +#else + // test tunnelForward + //m_tunnelForward = true; + //m_serverStartStep = SSS_ENABLE_TUNNEL_FORWARD; +#endif startServerByStep(); } else if (AdbProcess::AER_SUCCESS_START != processResult){ qCritical("adb push");