- 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.
82 lines
2.4 KiB
C++
Executable File
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;
|
|
}
|