diff --git a/Daemon.cpp b/Daemon.cpp index a00d85a2..d34712a3 100644 --- a/Daemon.cpp +++ b/Daemon.cpp @@ -265,13 +265,5 @@ namespace i2p return true; } - - bool DaemonQT::init(int argc, char* argv[]) - { - #if 0 - m_Impl = std::make_shared (argc, argv); - #endif - return Daemon_Singleton::init(argc, argv); - } } } diff --git a/Daemon.h b/Daemon.h index fd9afeec..6f1d3e88 100644 --- a/Daemon.h +++ b/Daemon.h @@ -33,9 +33,6 @@ namespace i2p #if defined(QT_GUI_LIB) // check if QT #define Daemon i2p::util::DaemonQT::Instance() -#if 0 - class DaemonQTImpl; -#endif class DaemonQT: public i2p::util::Daemon_Singleton { public: @@ -47,13 +44,6 @@ namespace i2p } bool init(int argc, char* argv[]); -#if 0 - void run (); - - private: - - std::shared_ptr m_Impl; -#endif }; #elif defined(_WIN32) diff --git a/i2pd.cpp b/i2pd.cpp index 2e9d5a19..e6c7abfa 100644 --- a/i2pd.cpp +++ b/i2pd.cpp @@ -17,7 +17,7 @@ int main( int argc, char* argv[] ) //QMessageBox::information(0,"Debug","runGUI completed"); QApplication app(argc, argv); qDebug("Initialising the daemon..."); - bool daemonInitSuccess = i2p::util::DaemonQt::DaemonQTImpl::init(argc, argv); + bool daemonInitSuccess = i2p::qt::DaemonQTImpl::init(argc, argv); if(!daemonInitSuccess) { QMessageBox::critical(0, "Error", "Daemon init failed"); return 1; @@ -28,14 +28,14 @@ int main( int argc, char* argv[] ) w.show (); int result; { - i2p::util::DaemonQt::Controller daemonQtController; + i2p::qt::Controller daemonQtController; qDebug("Starting the daemon..."); emit daemonQtController.startDaemon(); qDebug("Starting gui event loop..."); result = app.exec(); //QMessageBox::information(&w, "Debug", "exec finished"); } - i2p::util::DaemonQt::DaemonQTImpl::deinit(); + i2p::qt::DaemonQTImpl::deinit(); //QMessageBox::information(&w, "Debug", "demon stopped"); //exit(result); //return from main() causes intermittent sigsegv bugs in some Androids. exit() is a workaround for this qDebug("Exiting the application"); diff --git a/qt/i2pd_qt/DaemonQT.cpp b/qt/i2pd_qt/DaemonQT.cpp index 121d547c..6cef8133 100644 --- a/qt/i2pd_qt/DaemonQT.cpp +++ b/qt/i2pd_qt/DaemonQT.cpp @@ -7,139 +7,81 @@ 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(); + bool DaemonQT::init(int argc, char* argv[]) + { + return Daemon_Singleton::init(argc, argv); + } } -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 -#include "mainwindow.h" -#include -#include -#include "../../Daemon.h" namespace i2p { -namespace util +namespace qt { - class DaemonQTImpl: public std::enable_shared_from_this - { - public: - - DaemonQTImpl (int argc, char* argv[]): - m_App (argc, argv) - { - } - - void Run () - { - MainWindow w(m_App); - w.show (); - m_App.exec(); - } - private: - - void StartDaemon () - { - Daemon.start (); - } + 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(); + } - void StopDaemon () - { - Daemon.stop (); - } + 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(DaemonQTImpl::isRunning()) { + qDebug("Stopping the daemon..."); + DaemonQTImpl::stop(); + qDebug("Stopped the daemon."); + } + } - bool IsRunning () const - { - return Daemon.running; - } - private: - QApplication m_App; - }; + static DaemonQTImpl::runningChangedCallback DaemonQTImpl_runningChanged; + static bool DaemonQTImpl_running; + static QMutex* mutex; - bool DaemonQT::init(int argc, char* argv[]) - { - m_Impl = std::make_shared (argc, argv); - return Daemon_Singleton::init(argc, argv); - } + 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 DaemonQT::run () - { - if (m_Impl) - { - m_Impl->Run (); - m_Impl = nullptr; + 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(); } - } +} + } } -#endif + diff --git a/qt/i2pd_qt/DaemonQT.h b/qt/i2pd_qt/DaemonQT.h index 1d57d7e8..d76ed531 100644 --- a/qt/i2pd_qt/DaemonQT.h +++ b/qt/i2pd_qt/DaemonQT.h @@ -6,9 +6,7 @@ namespace i2p { -namespace util -{ -namespace DaemonQt +namespace qt { class Worker : public QObject { @@ -61,6 +59,5 @@ namespace DaemonQt }; } } -} #endif // DAEMONQT_H