#include "character_creation_worker.h" #include "produce_worker.h" #include "stockagemanager.h" #include "director_worker.h" #include "valuerecalculationworker.h" #include "connection_pool.h" #include "websocket_server.h" #include "message_broker.h" #include "usercharacterworker.h" #include "houseworker.h" #include "politics_worker.h" #include "underground_worker.h" #include "config.h" #include #include #include #include #include #include std::atomic keepRunning(true); void handleSignal(int signal) { if (signal == SIGINT || signal == SIGTERM) { std::cerr << "Signal erhalten: " << signal << ". Beende Anwendung..." << std::endl; keepRunning.store(false, std::memory_order_relaxed); } } int main() { std::signal(SIGINT, handleSignal); std::signal(SIGTERM, handleSignal); try { Config config("/etc/yourpart/daemon.conf"); ConnectionPool pool( config.get("DB_HOST"), config.get("DB_PORT"), config.get("DB_NAME"), config.get("DB_USER"), config.get("DB_PASSWORD"), 10 ); int websocketPort = std::stoi(config.get("WEBSOCKET_PORT")); MessageBroker broker; WebSocketServer websocketServer(websocketPort, pool, broker); // Use C++23 features for better performance std::vector> workers; workers.reserve(9); // Pre-allocate for better performance workers.emplace_back(std::make_unique(pool, broker)); workers.emplace_back(std::make_unique(pool, broker)); workers.emplace_back(std::make_unique(pool, broker)); workers.emplace_back(std::make_unique(pool, broker)); workers.emplace_back(std::make_unique(pool, broker)); workers.emplace_back(std::make_unique(pool, broker)); workers.emplace_back(std::make_unique(pool, broker)); workers.emplace_back(std::make_unique(pool, broker)); workers.emplace_back(std::make_unique(pool, broker)); websocketServer.setWorkers(workers); broker.start(); websocketServer.run(); for (auto &worker : workers) { worker->startWorkerThread(); worker->enableWatchdog(); } while (keepRunning) { std::this_thread::sleep_for(std::chrono::milliseconds(500)); } for (auto &worker : workers) { worker->stopWorkerThread(); } websocketServer.stop(); broker.stop(); } catch (const std::exception &e) { std::cerr << "Fehler: " << e.what() << std::endl; return 1; } return 0; }