diff options
| author | Riccardo Spagni <ric@spagni.net> | 2017-02-24 16:04:13 +0200 |
|---|---|---|
| committer | Riccardo Spagni <ric@spagni.net> | 2017-02-24 16:04:13 +0200 |
| commit | 2ca2376d45224f02bba54059b219abf4de679b36 (patch) | |
| tree | 75150695f2d5b2a2c8a4b52d94f39173dd992e91 /src/daemon/DaemonManager.cpp | |
| parent | 6120013ae2bdd195d7b0e71fb2a276490db26efb (diff) | |
| parent | faacd3d6a11efcb6dcf9a54ce55ed20e573b40f5 (diff) | |
| download | monzero-gui-2ca2376d45224f02bba54059b219abf4de679b36.tar.gz monzero-gui-2ca2376d45224f02bba54059b219abf4de679b36.tar.xz monzero-gui-2ca2376d45224f02bba54059b219abf4de679b36.zip | |
Merge pull request #486
faacd3d start daemon automatically and detached (Jaquee)
Diffstat (limited to 'src/daemon/DaemonManager.cpp')
| -rw-r--r-- | src/daemon/DaemonManager.cpp | 77 |
1 files changed, 35 insertions, 42 deletions
diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp index 8533f7ef..e1e89f61 100644 --- a/src/daemon/DaemonManager.cpp +++ b/src/daemon/DaemonManager.cpp @@ -23,10 +23,14 @@ DaemonManager *DaemonManager::instance(const QStringList *args) return m_instance; } -bool DaemonManager::start(const QString &flags) +bool DaemonManager::start(const QString &flags, bool testnet) { // prepare command line arguments and pass to monerod QStringList arguments; + arguments << "--detach"; + if(testnet) + arguments << "--testnet"; + foreach (const QString &str, m_clArgs) { qDebug() << QString(" [%1] ").arg(str); if (!str.isEmpty()) @@ -53,8 +57,7 @@ bool DaemonManager::start(const QString &flags) connect (m_daemon, SIGNAL(readyReadStandardError()), this, SLOT(printError())); // Start monerod - m_daemon->start(m_monerod, arguments); - bool started = m_daemon->waitForStarted(); + bool started = m_daemon->startDetached(m_monerod, arguments); // add state changed listener connect(m_daemon,SIGNAL(stateChanged(QProcess::ProcessState)),this,SLOT(stateChanged(QProcess::ProcessState))); @@ -68,16 +71,14 @@ bool DaemonManager::start(const QString &flags) return started; } -bool DaemonManager::stop() +bool DaemonManager::stop(bool testnet) { - if (initialized) { - qDebug() << "stopping daemon"; - // we can't use QProcess::terminate() on windows console process - // write exit command to stdin - m_daemon->write("exit\n"); - } - - return true; + QString message; + bool stopped = sendCommand("exit",testnet,message); + qDebug() << message; + if(stopped) + emit daemonStopped(); + return stopped; } void DaemonManager::stateChanged(QProcess::ProcessState state) @@ -110,40 +111,42 @@ void DaemonManager::printError() } } -bool DaemonManager::running() const -{ - if (initialized) { - qDebug() << m_daemon->state(); - qDebug() << QProcess::NotRunning; - // m_daemon->write("status\n"); - return m_daemon->state() > QProcess::NotRunning; +bool DaemonManager::running(bool testnet) const +{ + QString status; + sendCommand("status",testnet, status); + qDebug() << status; + // `./monerod status` returns BUSY when syncing. + // Treat busy as connected, until fixed upstream. + if (status.contains("Height:") || status.contains("BUSY") ) { + emit daemonStarted(); + return true; } + emit daemonStopped(); return false; } - -bool DaemonManager::sendCommand(const QString &cmd,bool testnet) +bool DaemonManager::sendCommand(const QString &cmd,bool testnet) const { - // If daemon is started by GUI - interactive mode - if (initialized && running()) { - m_daemon->write(cmd.toUtf8() +"\n"); - return true; - } + QString message; + return sendCommand(cmd, testnet, message); +} - // else send external command +bool DaemonManager::sendCommand(const QString &cmd,bool testnet, QString &message) const +{ QProcess p; QString external_cmd = m_monerod + " " + cmd; + qDebug() << "sending external cmd: " << external_cmd; - // Add nestnet flag if needed + // Add testnet flag if needed if (testnet) external_cmd += " --testnet"; external_cmd += "\n"; p.start(external_cmd); - bool started = p.waitForFinished(-1); - QString p_stdout = p.readAllStandardOutput(); - qDebug() << p_stdout; - emit daemonConsoleUpdated(p_stdout); + bool started = p.waitForFinished(-1); + message = p.readAllStandardOutput(); + emit daemonConsoleUpdated(message); return started; } @@ -163,13 +166,3 @@ DaemonManager::DaemonManager(QObject *parent) m_has_daemon = false; } } - -void DaemonManager::closing() -{ - qDebug() << __FUNCTION__; - stop(); - // Wait for daemon to stop before exiting (max 10 secs) - if (initialized) { - m_daemon->waitForFinished(10000); - } -} |
