amnezia-client/ipc/ipcserverprocess.cpp
2022-08-27 18:41:44 +03:00

93 lines
2.6 KiB
C++

#include "ipcserverprocess.h"
#include "ipc.h"
#include <QProcess>
#ifndef Q_OS_IOS
IpcServerProcess::IpcServerProcess(QObject *parent) :
IpcProcessInterfaceSource(parent),
m_process(QSharedPointer<QProcess>(new QProcess()))
{
connect(m_process.data(), &QProcess::errorOccurred, this, &IpcServerProcess::errorOccurred);
connect(m_process.data(), QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, &IpcServerProcess::finished);
connect(m_process.data(), &QProcess::readyRead, this, &IpcServerProcess::readyRead);
connect(m_process.data(), &QProcess::readyReadStandardError, this, &IpcServerProcess::readyReadStandardError);
connect(m_process.data(), &QProcess::readyReadStandardOutput, this, &IpcServerProcess::readyReadStandardOutput);
connect(m_process.data(), &QProcess::started, this, &IpcServerProcess::started);
connect(m_process.data(), &QProcess::stateChanged, this, &IpcServerProcess::stateChanged);
connect(m_process.data(), &QProcess::errorOccurred, [&](QProcess::ProcessError error){
qDebug() << "IpcServerProcess errorOccurred " << error;
});
}
IpcServerProcess::~IpcServerProcess()
{
qDebug() << "IpcServerProcess::~IpcServerProcess";
}
void IpcServerProcess::start()
{
if (m_process->program().isEmpty()) {
qDebug() << "IpcServerProcess failed to start, program is empty";
}
m_process->start();
qDebug() << "IpcServerProcess started, " << m_process->program() << m_process->arguments();
m_process->waitForStarted();
}
void IpcServerProcess::close()
{
m_process->close();
}
void IpcServerProcess::setArguments(const QStringList &arguments)
{
m_process->setArguments(arguments);
}
void IpcServerProcess::setInputChannelMode(QProcess::InputChannelMode mode)
{
m_process->setInputChannelMode(mode);
}
void IpcServerProcess::setNativeArguments(const QString &arguments)
{
#ifdef Q_OS_WIN
m_process->setNativeArguments(arguments);
#endif
}
void IpcServerProcess::setProcessChannelMode(QProcess::ProcessChannelMode mode)
{
m_process->setProcessChannelMode(mode);
}
void IpcServerProcess::setProgram(int programId)
{
m_process->setProgram(amnezia::permittedProcessPath(static_cast<amnezia::PermittedProcess>(programId)));
}
void IpcServerProcess::setWorkingDirectory(const QString &dir)
{
m_process->setWorkingDirectory(dir);
}
QByteArray IpcServerProcess::readAll()
{
return m_process->readAll();
}
QByteArray IpcServerProcess::readAllStandardError()
{
return m_process->readAllStandardError();
}
QByteArray IpcServerProcess::readAllStandardOutput()
{
return m_process->readAllStandardOutput();
}
#endif