From 7da8c54924655be6e6b1d53aeb58ff20e55cd1d3 Mon Sep 17 00:00:00 2001 From: Nick Bolton Date: Thu, 13 Mar 2025 18:24:05 +0000 Subject: [PATCH] refactor(daemon): Use functional type for daemonize func --- src/lib/arch/IArchDaemon.h | 4 +++- src/lib/arch/win32/ArchDaemonWindows.h | 6 +++-- src/lib/arch/win32/ArchMiscWindows.h | 4 +++- src/lib/deskflow/DaemonApp.cpp | 33 +++++++++++--------------- src/lib/deskflow/DaemonApp.h | 1 + 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/lib/arch/IArchDaemon.h b/src/lib/arch/IArchDaemon.h index 36fec2134..a03a5c659 100644 --- a/src/lib/arch/IArchDaemon.h +++ b/src/lib/arch/IArchDaemon.h @@ -8,6 +8,8 @@ #pragma once #include "common/IInterface.h" + +#include #include //! Interface for architecture dependent daemonizing @@ -19,7 +21,7 @@ implement this interface. class IArchDaemon : public IInterface { public: - typedef int (*DaemonFunc)(int argc, const char **argv); + using DaemonFunc = std::function; //! @name manipulators //@{ diff --git a/src/lib/arch/win32/ArchDaemonWindows.h b/src/lib/arch/win32/ArchDaemonWindows.h index 0ccba0092..0b50bf5fd 100644 --- a/src/lib/arch/win32/ArchDaemonWindows.h +++ b/src/lib/arch/win32/ArchDaemonWindows.h @@ -10,19 +10,21 @@ #include "arch/IArchDaemon.h" #include "arch/IArchMultithread.h" #include "common/constants.h" -#include #define WIN32_LEAN_AND_MEAN #include #include +#include +#include + #define ARCH_DAEMON ArchDaemonWindows //! Win32 implementation of IArchDaemon class ArchDaemonWindows : public IArchDaemon { public: - typedef int (*RunFunc)(void); + using RunFunc = std::function; ArchDaemonWindows(); virtual ~ArchDaemonWindows(); diff --git a/src/lib/arch/win32/ArchMiscWindows.h b/src/lib/arch/win32/ArchMiscWindows.h index 651463bda..22300420d 100644 --- a/src/lib/arch/win32/ArchMiscWindows.h +++ b/src/lib/arch/win32/ArchMiscWindows.h @@ -15,6 +15,8 @@ #include +#include + //! Miscellaneous win32 functions. class ArchMiscWindows { @@ -34,7 +36,7 @@ public: kDISPLAY = 0x0002 }; - typedef int (*RunFunc)(void); + using RunFunc = std::function; //! Initialize static void init(); diff --git a/src/lib/deskflow/DaemonApp.cpp b/src/lib/deskflow/DaemonApp.cpp index 5fbc3d968..5fc34bbe9 100644 --- a/src/lib/deskflow/DaemonApp.cpp +++ b/src/lib/deskflow/DaemonApp.cpp @@ -47,24 +47,6 @@ DaemonApp::DaemonApp() DaemonApp::~DaemonApp() = default; -int daemonLoop() -{ - DaemonApp::instance().mainLoop(); - return kExitSuccess; -} - -#if SYSAPI_WIN32 -int daemonLoop(int, const char **) -{ - return ArchMiscWindows::runDaemon(daemonLoop); -} -#elif SYSAPI_UNIX -int daemonLoop(int, const char **) -{ - return daemonLoop(); -} -#endif - void DaemonApp::run() { if (m_foreground) { @@ -72,10 +54,23 @@ void DaemonApp::run() mainLoop(); } else { LOG_DEBUG("running daemon in background (daemonizing)"); - ARCH->daemonize(kAppName, daemonLoop); + ARCH->daemonize(kAppName, [this](int, const char **) { return daemonLoop(); }); } } +int DaemonApp::daemonLoop() +{ +#if SYSAPI_WIN32 + return ArchMiscWindows::runDaemon([this]() { + mainLoop(); + return kExitSuccess; + }); +#elif SYSAPI_UNIX + mainLoop(); + return kExitSuccess; +#endif +} + void DaemonApp::saveLogLevel(const QString &logLevel) const { LOG_DEBUG("log level changed: %s", logLevel.toUtf8().constData()); diff --git a/src/lib/deskflow/DaemonApp.h b/src/lib/deskflow/DaemonApp.h index d84b8ba97..669d8a1b2 100644 --- a/src/lib/deskflow/DaemonApp.h +++ b/src/lib/deskflow/DaemonApp.h @@ -54,6 +54,7 @@ public: void clearWatchdogCommand(); void clearSettings() const; std::string logFilename(); + int daemonLoop(); static DaemonApp &instance() {