mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-04-20 03:25:02 +00:00
server功能完成
This commit is contained in:
parent
b54b1e01d2
commit
eef4da59c9
4 changed files with 71 additions and 64 deletions
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 4.6.2, 2018-10-11T13:13:22. -->
|
||||
<!-- Written by QtCreator 4.6.2, 2018-10-11T19:35:50. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
<value type="QByteArray">{37b22fe7-3e02-43d3-85e3-251a3ebe4093}</value>
|
||||
<value type="QByteArray">{49c3991c-71bb-4f46-826d-1d1cf5cba2d4}</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||
|
@ -292,7 +292,7 @@
|
|||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">QtScrcpy.pro</value>
|
||||
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">G:/mygitcode/QtScrcpy/build-QtScrcpy-Desktop_Qt_5_9_6_MSVC2015_32bit-Debug</value>
|
||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default"></value>
|
||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
|
|
|
@ -38,10 +38,10 @@ void AdbProcess::initSignals()
|
|||
connect(this, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this,
|
||||
[this](int exitCode, QProcess::ExitStatus exitStatus){
|
||||
if (NormalExit == exitStatus && 0 == exitCode) {
|
||||
emit adbProcessResult(AER_SUCCESS);
|
||||
emit adbProcessResult(AER_SUCCESS_EXEC);
|
||||
} else {
|
||||
//P7C0218510000537 unauthorized ,手机端此时弹出调试认证,要允许调试
|
||||
emit adbProcessResult(AER_ERROR_CMD);
|
||||
emit adbProcessResult(AER_ERROR_EXEC);
|
||||
}
|
||||
|
||||
qDebug() << ">>>>>>>>" << __FUNCTION__;
|
||||
|
@ -73,7 +73,7 @@ void AdbProcess::initSignals()
|
|||
|
||||
connect(this, &QProcess::started, this,
|
||||
[this](){
|
||||
|
||||
emit adbProcessResult(AER_SUCCESS_START);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -9,9 +9,10 @@ class AdbProcess : public QProcess
|
|||
|
||||
public:
|
||||
enum ADB_EXEC_RESULT {
|
||||
AER_SUCCESS, // 执行成功
|
||||
AER_SUCCESS_START, // 启动成功
|
||||
AER_ERROR_START, // 启动失败
|
||||
AER_ERROR_CMD, // 命令执行失败
|
||||
AER_SUCCESS_EXEC, // 执行成功
|
||||
AER_ERROR_EXEC, // 执行失败
|
||||
AER_ERROR_MISSING_BINARY, // 找不到文件
|
||||
};
|
||||
|
||||
|
|
118
src/server.cpp
118
src/server.cpp
|
@ -10,6 +10,7 @@
|
|||
Server::Server(QObject *parent) : QObject(parent)
|
||||
{
|
||||
connect(&m_workProcess, &AdbProcess::adbProcessResult, this, &Server::onWorkProcessResult);
|
||||
connect(&m_serverProcess, &AdbProcess::adbProcessResult, this, &Server::onWorkProcessResult);
|
||||
|
||||
connect(&m_serverSocket, &QTcpServer::newConnection, this, [this](){
|
||||
m_deviceSocket = m_serverSocket.nextPendingConnection();
|
||||
|
@ -53,7 +54,9 @@ bool Server::removeServer()
|
|||
return false;
|
||||
}
|
||||
connect(adb, &AdbProcess::adbProcessResult, this, [this](AdbProcess::ADB_EXEC_RESULT processResult){
|
||||
sender()->deleteLater();
|
||||
if (AdbProcess::AER_SUCCESS_START != processResult) {
|
||||
sender()->deleteLater();
|
||||
}
|
||||
});
|
||||
adb->removePath(m_serial, DEVICE_SERVER_PATH);
|
||||
return true;
|
||||
|
@ -75,7 +78,9 @@ bool Server::disableTunnelReverse()
|
|||
return false;
|
||||
}
|
||||
connect(adb, &AdbProcess::adbProcessResult, this, [this](AdbProcess::ADB_EXEC_RESULT processResult){
|
||||
sender()->deleteLater();
|
||||
if (AdbProcess::AER_SUCCESS_START != processResult) {
|
||||
sender()->deleteLater();
|
||||
}
|
||||
});
|
||||
adb->reverseRemove(m_serial, SOCKET_NAME);
|
||||
return true;
|
||||
|
@ -96,7 +101,9 @@ bool Server::disableTunnelForward()
|
|||
return false;
|
||||
}
|
||||
connect(adb, &AdbProcess::adbProcessResult, this, [this](AdbProcess::ADB_EXEC_RESULT processResult){
|
||||
sender()->deleteLater();
|
||||
if (AdbProcess::AER_SUCCESS_START != processResult) {
|
||||
sender()->deleteLater();
|
||||
}
|
||||
});
|
||||
adb->forwardRemove(m_serial, m_localPort);
|
||||
return true;
|
||||
|
@ -104,8 +111,8 @@ bool Server::disableTunnelForward()
|
|||
|
||||
bool Server::execute()
|
||||
{
|
||||
if (m_workProcess.isRuning()) {
|
||||
m_workProcess.kill();
|
||||
if (m_serverProcess.isRuning()) {
|
||||
m_serverProcess.kill();
|
||||
}
|
||||
QStringList args;
|
||||
args << "shell";
|
||||
|
@ -120,15 +127,9 @@ bool Server::execute()
|
|||
args << m_crop;
|
||||
}
|
||||
|
||||
// connect(adb, &AdbProcess::adbProcessResult, this, [this](AdbProcess::ADB_EXEC_RESULT processResult){
|
||||
// if (AdbProcess::AER_SUCCESS == processResult) {
|
||||
|
||||
// }
|
||||
// sender()->deleteLater();
|
||||
// });
|
||||
// adb -s P7C0218510000537 shell CLASSPATH=/data/local/tmp/scrcpy-server.jar app_process / com.genymobile.scrcpy.Server 0 8000000 false
|
||||
// 这条adb命令是阻塞运行的,workProcess不会退出了
|
||||
m_workProcess.execute(m_serial, args);
|
||||
// 这条adb命令是阻塞运行的,m_serverProcess进程不会退出了
|
||||
m_serverProcess.execute(m_serial, args);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -211,7 +212,7 @@ void Server::connectTo()
|
|||
void Server::stop()
|
||||
{
|
||||
// ignore failure
|
||||
m_workProcess.terminate();
|
||||
m_serverProcess.kill();
|
||||
if (m_tunnelEnabled) {
|
||||
if (m_tunnelForward) {
|
||||
disableTunnelForward();
|
||||
|
@ -281,42 +282,53 @@ bool Server::startServerByStep()
|
|||
|
||||
void Server::onWorkProcessResult(AdbProcess::ADB_EXEC_RESULT processResult)
|
||||
{
|
||||
if (SSS_NULL != m_serverStartStep) {
|
||||
switch (m_serverStartStep) {
|
||||
case SSS_PUSH:
|
||||
if (AdbProcess::AER_SUCCESS != processResult) {
|
||||
qCritical("adb push");
|
||||
if (sender() == &m_workProcess) {
|
||||
if (SSS_NULL != m_serverStartStep) {
|
||||
switch (m_serverStartStep) {
|
||||
case SSS_PUSH:
|
||||
if (AdbProcess::AER_SUCCESS_EXEC == processResult) {
|
||||
m_serverCopiedToDevice = true;
|
||||
m_serverStartStep = SSS_ENABLE_TUNNEL_REVERSE;
|
||||
startServerByStep();
|
||||
} else if (AdbProcess::AER_SUCCESS_START != processResult){
|
||||
qCritical("adb push");
|
||||
m_serverStartStep = SSS_NULL;
|
||||
emit serverStartResult(false);
|
||||
}
|
||||
break;
|
||||
case SSS_ENABLE_TUNNEL_REVERSE:
|
||||
if (AdbProcess::AER_SUCCESS_EXEC == processResult) {
|
||||
m_serverStartStep = SSS_EXECUTE_SERVER;
|
||||
startServerByStep();
|
||||
} else if (AdbProcess::AER_SUCCESS_START != processResult){
|
||||
qCritical("adb reverse");
|
||||
m_tunnelForward = true;
|
||||
m_serverStartStep = SSS_ENABLE_TUNNEL_FORWARD;
|
||||
startServerByStep();
|
||||
}
|
||||
break;
|
||||
case SSS_ENABLE_TUNNEL_FORWARD:
|
||||
if (AdbProcess::AER_SUCCESS_EXEC == processResult) {
|
||||
m_serverStartStep = SSS_EXECUTE_SERVER;
|
||||
startServerByStep();
|
||||
} else if (AdbProcess::AER_SUCCESS_START != processResult){
|
||||
qCritical("adb forward");
|
||||
m_serverStartStep = SSS_NULL;
|
||||
emit serverStartResult(false);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sender() == &m_serverProcess) {
|
||||
if (SSS_EXECUTE_SERVER == m_serverStartStep) {
|
||||
if (AdbProcess::AER_SUCCESS_START == processResult) {
|
||||
m_serverStartStep = SSS_NULL;
|
||||
emit serverStartResult(false);
|
||||
} else {
|
||||
m_serverCopiedToDevice = true;
|
||||
m_serverStartStep = SSS_ENABLE_TUNNEL_REVERSE;
|
||||
startServerByStep();
|
||||
}
|
||||
break;
|
||||
case SSS_ENABLE_TUNNEL_REVERSE:
|
||||
if (AdbProcess::AER_SUCCESS != processResult) {
|
||||
qCritical("adb reverse");
|
||||
m_tunnelForward = true;
|
||||
m_serverStartStep = SSS_ENABLE_TUNNEL_FORWARD;
|
||||
startServerByStep();
|
||||
} else {
|
||||
m_serverStartStep = SSS_EXECUTE_SERVER;
|
||||
startServerByStep();
|
||||
}
|
||||
break;
|
||||
case SSS_ENABLE_TUNNEL_FORWARD:
|
||||
if (AdbProcess::AER_SUCCESS != processResult) {
|
||||
qCritical("adb forward");
|
||||
m_serverStartStep = SSS_NULL;
|
||||
emit serverStartResult(false);
|
||||
} else {
|
||||
m_serverStartStep = SSS_EXECUTE_SERVER;
|
||||
startServerByStep();
|
||||
}
|
||||
break;
|
||||
case SSS_EXECUTE_SERVER:
|
||||
if (AdbProcess::AER_SUCCESS != processResult) {
|
||||
m_tunnelEnabled = true;
|
||||
emit serverStartResult(true);
|
||||
} else if (AdbProcess::AER_ERROR_START == processResult){
|
||||
if (!m_tunnelForward) {
|
||||
m_serverSocket.close();
|
||||
disableTunnelReverse();
|
||||
|
@ -326,14 +338,8 @@ void Server::onWorkProcessResult(AdbProcess::ADB_EXEC_RESULT processResult)
|
|||
qCritical("adb shell start server failed");
|
||||
m_serverStartStep = SSS_NULL;
|
||||
emit serverStartResult(false);
|
||||
} else {
|
||||
m_serverStartStep = SSS_NULL;
|
||||
m_tunnelEnabled = true;
|
||||
emit serverStartResult(true);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue