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