Files
yourchat/src/main.cpp
Torsten Schulz (local) 6b49fff85e Verbessere SSLServer-Fehlerbehandlung und füge Verzögerung beim Start hinzu
- Ergänze eine Fehlerbehandlung im SSLServer-Thread, um Ausnahmen zu protokollieren, anstatt sie auszulösen.
- Modifiziere die `startServer`-Methode, um bei einem Fehler beim Erstellen des LWS-Kontexts eine Fehlermeldung auszugeben und den Server ordnungsgemäß zu stoppen.
- Füge eine Verzögerung von 100 Millisekunden in `main.cpp` hinzu, um dem SSL-Server Zeit zum Initialisieren zu geben.
2025-09-04 14:47:27 +02:00

82 lines
2.4 KiB
C++
Executable File

#include "core/config.h"
#include "core/server.h"
#include "core/ssl_server.h"
#include "lib/database.h"
#include <iostream>
#include <csignal>
#include <atomic>
#include <thread>
#include <chrono>
// Global flag for graceful shutdown
std::atomic<bool> g_running{true};
std::shared_ptr<Yc::Lib::SSLServer> g_sslServer = nullptr;
std::shared_ptr<Yc::Lib::Server> g_server = nullptr;
// Signal handler for graceful shutdown
void signalHandler(int signal) {
std::cout << "\n[YourChat] Received signal " << signal << ", shutting down gracefully..." << std::endl;
g_running = false;
if (g_sslServer) {
g_sslServer->stop();
}
if (g_server) {
g_server->stop();
}
}
// main function
int main(int, char **) {
// Set up signal handlers
std::signal(SIGINT, signalHandler);
std::signal(SIGTERM, signalHandler);
auto config = std::make_shared<Yc::Lib::Config>();
auto database = std::make_shared<Yc::Lib::Database>(config);
// Check if SSL is enabled
bool sslEnabled = config->value("server", "ssl_enabled").asBool();
try {
if (sslEnabled) {
std::cout << "[YourChat] Starting with SSL/TLS support" << std::endl;
g_sslServer = std::make_shared<Yc::Lib::SSLServer>(config, database);
g_sslServer->createRooms();
g_sslServer->run();
// Give the SSL server a moment to initialize
std::this_thread::sleep_for(std::chrono::milliseconds(100));
} else {
std::cout << "[YourChat] Starting without SSL/TLS support" << std::endl;
g_server = std::make_shared<Yc::Lib::Server>(config, database);
g_server->createRooms(config->group("rooms"));
g_server->run();
}
// Main loop - wait for shutdown signal
while (g_running) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
// Clean up servers before exit
if (g_sslServer) {
g_sslServer->stop();
g_sslServer.reset();
}
if (g_server) {
g_server->stop();
g_server.reset();
}
std::cout << "[YourChat] Shutdown complete." << std::endl;
} catch (const std::exception& e) {
std::cerr << "[YourChat] Error: " << e.what() << std::endl;
return 1;
}
return 0;
}