From a7b22dac24bd8e2a079d758d4dde9921fef23056 Mon Sep 17 00:00:00 2001 From: EndrII Date: Tue, 4 May 2021 12:39:16 +0300 Subject: [PATCH] fix the d option --- Patronum/src/PServiceBase.cpp | 4 ++-- Patronum/src/Private/isocketwraper.h | 6 ++++++ Patronum/src/Private/localsocket.cpp | 5 +++++ Patronum/src/Private/localsocket.h | 13 +++++++------ Patronum/src/Private/serviceprivate.cpp | 6 ++++++ 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/Patronum/src/PServiceBase.cpp b/Patronum/src/PServiceBase.cpp index 447313c..edccf39 100644 --- a/Patronum/src/PServiceBase.cpp +++ b/Patronum/src/PServiceBase.cpp @@ -58,10 +58,10 @@ void ServiceBase::handleReceiveData(const QSet &data) { } if (commandList.size()) { - QStringList stringList; + QString stringList; for (const auto&i : list) { - stringList += i.toString(); + stringList += i.toString() + " "; } QVariantMap result; diff --git a/Patronum/src/Private/isocketwraper.h b/Patronum/src/Private/isocketwraper.h index b7fc45b..27f72f1 100644 --- a/Patronum/src/Private/isocketwraper.h +++ b/Patronum/src/Private/isocketwraper.h @@ -60,6 +60,12 @@ public: */ virtual bool connectToTarget() = 0; + /** + * @brief isRunning This method shold be return true if the service is running else false. + * @return return true if the service is running else false. + */ + virtual bool isRunning() = 0; + State state() const; protected: diff --git a/Patronum/src/Private/localsocket.cpp b/Patronum/src/Private/localsocket.cpp index ebd00c7..f5c6d9b 100644 --- a/Patronum/src/Private/localsocket.cpp +++ b/Patronum/src/Private/localsocket.cpp @@ -7,6 +7,7 @@ #include "localsocket.h" +#include #include #include #include @@ -95,6 +96,10 @@ bool LocalSocket::connectToTarget() { return m_socket->isValid(); } +bool LocalSocket::isRunning() { + return (m_server && m_server->isListening()) || QFile::exists(m_target); +} + void LocalSocket::handleStateChanged(QLocalSocket::LocalSocketState socketState) { if (socketState == QLocalSocket::LocalSocketState::ConnectedState) { diff --git a/Patronum/src/Private/localsocket.h b/Patronum/src/Private/localsocket.h index 1af0855..9d844a7 100644 --- a/Patronum/src/Private/localsocket.h +++ b/Patronum/src/Private/localsocket.h @@ -34,14 +34,15 @@ public: // ISocketWraper interface public: - bool send(const QByteArray &data); - bool isValid() const; - bool listen(); - bool connectToTarget(); + bool send(const QByteArray &data) override; + bool isValid() const override; + bool listen() override; + bool connectToTarget() override; + bool isRunning() override; signals: - void sigReceve(QByteArray data); - void sigStateChanged(State state); + void sigReceve(QByteArray data) override; + void sigStateChanged(State state) override; private: QLocalSocket *m_socket = nullptr; diff --git a/Patronum/src/Private/serviceprivate.cpp b/Patronum/src/Private/serviceprivate.cpp index b26fd48..0d3ac7f 100644 --- a/Patronum/src/Private/serviceprivate.cpp +++ b/Patronum/src/Private/serviceprivate.cpp @@ -120,6 +120,12 @@ bool ServicePrivate::start() { } bool ServicePrivate::startDeamon() { + if (_socket->isRunning()) { + QuasarAppUtils::Params::log("Failed to start a service because an another service alredy started", + QuasarAppUtils::Error); + return false; + } + QProcess proc; proc.setProgram(QuasarAppUtils::Params::getCurrentExecutable());