From 5c297f5877d38993717bfa682a0e23fcf124df79 Mon Sep 17 00:00:00 2001 From: Sven Luethi Date: Wed, 7 Apr 2021 15:12:47 +0200 Subject: [PATCH] wip --- src/core/EventBus.cpp | 5 ++++- src/core/main.cpp | 41 +++++++++++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/core/EventBus.cpp b/src/core/EventBus.cpp index 634c6be..26c6c98 100644 --- a/src/core/EventBus.cpp +++ b/src/core/EventBus.cpp @@ -39,7 +39,10 @@ Event& EventBus::registerEvent(const string& eventID) { } void EventBus::run() { - _logger.warn.ln("Hi from EventBus run method, from within Event Thread!"); + while (true) { + std::this_thread::sleep_for(std::chrono::seconds(5)); + _logger.warn.ln("EventBus: Looping..."); + } } // =============================== Event Class ================================ diff --git a/src/core/main.cpp b/src/core/main.cpp index 77751da..ee54c39 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -5,12 +5,20 @@ #include #include #include +#include using namespace Plains; using namespace Core; using std::vector; using std::string; +void signalHandler( int ); + +Logger* globalLogger; +ConfigManager* globalConfigManager; +EventBus* globalEventBus; +UI::Server* globalUIServer; +Resolver::Server* globalResolver; int main(int args, char **argv) { Logger logger(Logger::DEBUG); @@ -22,13 +30,23 @@ int main(int args, char **argv) { arguments.push_back (argv[index]); } + // Handle signals + signal(SIGINT, signalHandler); + try { - ConfigManager cfg(logger, arguments); + ConfigManager configManager(logger, arguments); EventBus eventBus(logger); - UI::Server uiServer(logger, eventBus); + UI::Server uIServer(logger, eventBus); Resolver::Server resolver(logger, eventBus); + // Pass objects to global scope for signal handler + globalLogger = &logger; + globalConfigManager = &configManager; + globalEventBus = &eventBus; + globalUIServer = &uIServer; + globalResolver = &resolver; + /* // Some test code below: class Testi : public EventSubscriber { @@ -56,10 +74,6 @@ int main(int args, char **argv) { eventBus.run(); logger.info.ln ("PLAINS successfully started."); - // Run something on main thread... - //std::this_thread::sleep_for(std::chrono::seconds(15)); - //std::cin.get(); - logger.info.ln ("Shutting down PLAINS. Good Bye!"); } catch (Exception& e) { logger.fatal << "Uncaught Exception: " << e.what() << Logger::commit; @@ -76,3 +90,18 @@ int main(int args, char **argv) { return 0; } +void signalHandler( int signalNumber ) { + switch(signalNumber) { + case SIGINT: + globalLogger->warn << "Shutting down Plains..." << Logger::commit; + globalResolver->~Server(); + globalUIServer->~Server(); + globalEventBus->~EventBus(); + globalConfigManager->~ConfigManager(); + globalLogger->info.ln ("PLAINS shut down."); + globalLogger->~Logger(); + exit(0); + break; + } +} +