diff --git a/CMakeLists.txt b/CMakeLists.txt index a072d12..362aebb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ add_executable(BeamMP-Server include/TSentry.h src/TSentry.cpp include/TPPSMonitor.h src/TPPSMonitor.cpp include/TNetwork.h src/TNetwork.cpp - include/SignalHandling.h) + include/SignalHandling.h src/SignalHandling.cpp) target_compile_definitions(BeamMP-Server PRIVATE SECRET_SENTRY_URL="${BEAMMP_SECRET_SENTRY_URL}") diff --git a/include/SignalHandling.h b/include/SignalHandling.h index 8f3dc93..e945d37 100644 --- a/include/SignalHandling.h +++ b/include/SignalHandling.h @@ -1,68 +1,3 @@ #pragma once -#include "Common.h" - -#ifdef __unix -#include -static void UnixSignalHandler(int sig) { - switch (sig) { - case SIGPIPE: - warn("ignoring SIGPIPE"); - break; - case SIGTERM: - info("gracefully shutting down via SIGTERM"); - Application::GracefullyShutdown(); - break; - case SIGINT: - info("gracefully shutting down via SIGINT"); - Application::GracefullyShutdown(); - break; - default: - debug("unhandled signal: " + std::to_string(sig)); - break; - } -} -#endif // __unix - -#ifdef WIN32 -#include -// return TRUE if handled, FALSE if not -BOOL WINAPI Win32CtrlC_Handler(DWORD CtrlType) { - switch (CtrlType) { - case CTRL_C_EVENT: - info("gracefully shutting down via CTRL+C"); - Application::GracefullyShutdown(); - return TRUE; - case CTRL_BREAK_EVENT: - info("gracefully shutting down via CTRL+BREAK"); - Application::GracefullyShutdown(); - return TRUE; - case CTRL_CLOSE_EVENT: - info("gracefully shutting down via close"); - Application::GracefullyShutdown(); - return TRUE; - } - // we dont care for any others like CTRL_LOGOFF_EVENT and CTRL_SHUTDOWN_EVENT - return FALSE; -} -#endif // WIN32 - -// clang-format off -static void SetupSignalHandlers() { - // signal handlers for unix - #ifdef __unix - trace("registering handlers for SIGINT, SIGTERM, SIGPIPE"); - signal(SIGPIPE, UnixSignalHandler); - signal(SIGTERM, UnixSignalHandler); - #ifndef DEBUG - signal(SIGINT, UnixSignalHandler); - #endif // DEBUG - #endif // __unix - - // signal handlers for win32 - #ifdef WIN32 - trace("registering handlers for CTRL_*_EVENTs"); - SetConsoleCtrlHandler(Win32CtrlC_Handler, TRUE); - #endif // WIN32 -} -// clang-format on +void SetupSignalHandlers(); diff --git a/src/SignalHandling.cpp b/src/SignalHandling.cpp new file mode 100644 index 0000000..3325871 --- /dev/null +++ b/src/SignalHandling.cpp @@ -0,0 +1,65 @@ +#include "SignalHandling.h" +#include "Common.h" + +#ifdef __unix +#include +static void UnixSignalHandler(int sig) { + switch (sig) { + case SIGPIPE: + warn("ignoring SIGPIPE"); + break; + case SIGTERM: + info("gracefully shutting down via SIGTERM"); + Application::GracefullyShutdown(); + break; + case SIGINT: + info("gracefully shutting down via SIGINT"); + Application::GracefullyShutdown(); + break; + default: + debug("unhandled signal: " + std::to_string(sig)); + break; + } +} +#endif // __unix + +#ifdef WIN32 +#include +// return TRUE if handled, FALSE if not +BOOL WINAPI Win32CtrlC_Handler(DWORD CtrlType) { + switch (CtrlType) { + case CTRL_C_EVENT: + info("gracefully shutting down via CTRL+C"); + Application::GracefullyShutdown(); + return TRUE; + case CTRL_BREAK_EVENT: + info("gracefully shutting down via CTRL+BREAK"); + Application::GracefullyShutdown(); + return TRUE; + case CTRL_CLOSE_EVENT: + info("gracefully shutting down via close"); + Application::GracefullyShutdown(); + return TRUE; + } + // we dont care for any others like CTRL_LOGOFF_EVENT and CTRL_SHUTDOWN_EVENT + return FALSE; +} +#endif // WIN32 + +void SetupSignalHandlers() { + // signal handlers for unix#include +#ifdef __unix + trace("registering handlers for SIGINT, SIGTERM, SIGPIPE"); + signal(SIGPIPE, UnixSignalHandler); + signal(SIGTERM, UnixSignalHandler); +#ifndef DEBUG + signal(SIGINT, UnixSignalHandler); +#endif // DEBUG +#endif // __unix + + // signal handlers for win32 +#ifdef WIN32 + trace("registering handlers for CTRL_*_EVENTs"); + SetConsoleCtrlHandler(Win32CtrlC_Handler, TRUE); +#endif // WIN32 +}