server功能完成

This commit is contained in:
Barry 2018-10-11 21:10:09 +08:00
parent bf8bb7e035
commit 67ef24d7db
4 changed files with 71 additions and 64 deletions

View file

@ -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>

View file

@ -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);
});
}

View file

@ -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, // 找不到文件
};

View file

@ -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;
}
}
}