mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-27 19:27:49 +02:00
qt: daemon now operates in the background thread; added Quit GUI button
This commit is contained in:
parent
3e912c6198
commit
1b35f68de9
12 changed files with 360 additions and 43 deletions
|
@ -1,3 +1,83 @@
|
|||
#include "DaemonQT.h"
|
||||
#include "../../Daemon.h"
|
||||
#include <QMutex>
|
||||
#include <QMutexLocker>
|
||||
|
||||
namespace i2p
|
||||
{
|
||||
namespace util
|
||||
{
|
||||
namespace DaemonQt
|
||||
{
|
||||
|
||||
void Worker::startDaemon() {
|
||||
qDebug("Performing daemon start...");
|
||||
DaemonQTImpl::start();
|
||||
qDebug("Daemon started.");
|
||||
emit resultReady();
|
||||
}
|
||||
void Worker::restartDaemon() {
|
||||
qDebug("Performing daemon restart...");
|
||||
DaemonQTImpl::restart();
|
||||
qDebug("Daemon restarted.");
|
||||
emit resultReady();
|
||||
}
|
||||
void Worker::stopDaemon() {
|
||||
qDebug("Performing daemon stop...");
|
||||
DaemonQTImpl::stop();
|
||||
qDebug("Daemon stopped.");
|
||||
emit resultReady();
|
||||
}
|
||||
|
||||
Controller::Controller() {
|
||||
Worker *worker = new Worker;
|
||||
worker->moveToThread(&workerThread);
|
||||
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
|
||||
connect(this, &Controller::startDaemon, worker, &Worker::startDaemon);
|
||||
connect(this, &Controller::stopDaemon, worker, &Worker::stopDaemon);
|
||||
connect(this, &Controller::restartDaemon, worker, &Worker::restartDaemon);
|
||||
connect(worker, &Worker::resultReady, this, &Controller::handleResults);
|
||||
workerThread.start();
|
||||
}
|
||||
Controller::~Controller() {
|
||||
qDebug("Closing and waiting for daemon worker thread...");
|
||||
workerThread.quit();
|
||||
workerThread.wait();
|
||||
qDebug("Waiting for daemon worker thread finished.");
|
||||
if(i2p::util::DaemonQt::DaemonQTImpl::isRunning()) {
|
||||
qDebug("Stopping the daemon...");
|
||||
i2p::util::DaemonQt::DaemonQTImpl::stop();
|
||||
qDebug("Stopped the daemon.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static DaemonQTImpl::runningChangedCallback DaemonQTImpl_runningChanged;
|
||||
static bool DaemonQTImpl_running;
|
||||
static QMutex* mutex;
|
||||
|
||||
bool DaemonQTImpl::init(int argc, char* argv[]){mutex=new QMutex(QMutex::Recursive);setRunningCallback(0);DaemonQTImpl_running=false;return Daemon.init(argc,argv);}
|
||||
void DaemonQTImpl::deinit(){delete mutex;}
|
||||
void DaemonQTImpl::start(){QMutexLocker locker(mutex);setRunning(true);Daemon.start();}
|
||||
void DaemonQTImpl::stop(){QMutexLocker locker(mutex);Daemon.stop();setRunning(false);}
|
||||
void DaemonQTImpl::restart(){QMutexLocker locker(mutex);stop();start();}
|
||||
|
||||
void DaemonQTImpl::setRunningCallback(runningChangedCallback cb){DaemonQTImpl_runningChanged=cb;}
|
||||
bool DaemonQTImpl::isRunning(){return DaemonQTImpl_running;}
|
||||
void DaemonQTImpl::setRunning(bool newValue){
|
||||
bool oldValue = DaemonQTImpl_running;
|
||||
if(oldValue!=newValue) {
|
||||
DaemonQTImpl_running = newValue;
|
||||
if(DaemonQTImpl_runningChanged!=0)DaemonQTImpl_runningChanged();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
#include <memory>
|
||||
#include "mainwindow.h"
|
||||
#include <QApplication>
|
||||
|
@ -19,7 +99,7 @@ namespace util
|
|||
|
||||
void Run ()
|
||||
{
|
||||
MainWindow w;
|
||||
MainWindow w(m_App);
|
||||
w.show ();
|
||||
m_App.exec();
|
||||
}
|
||||
|
@ -62,3 +142,4 @@ namespace util
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue