Füge Unterstützung für das Neuladen von Räumen aus der Datenbank hinzu
- Implementiere die Methode `reloadRooms` in den Klassen `Server` und `SSLServer`, um Räume aus der Datenbank neu zu laden. - Ergänze einen Signalhandler in `main.cpp`, um das Neuladen der Räume bei Empfang von SIGUSR1 zu ermöglichen. - Füge die Methode `getRooms` in der `Database`-Klasse hinzu, um Räume aus der Datenbank abzurufen. - Aktualisiere die Header-Dateien entsprechend, um die neuen Methoden zu berücksichtigen.
This commit is contained in:
@@ -307,6 +307,19 @@ namespace Yc {
|
||||
return true;
|
||||
}
|
||||
|
||||
void Server::reloadRooms() {
|
||||
std::cout << "[YourChat] Reloading rooms from database..." << std::endl;
|
||||
|
||||
// Clear existing rooms
|
||||
_rooms.clear();
|
||||
|
||||
// Reload from database
|
||||
Json::Value emptyRoomList;
|
||||
createRooms(emptyRoomList);
|
||||
|
||||
std::cout << "[YourChat] Reloaded " << _rooms.size() << " rooms from database" << std::endl;
|
||||
}
|
||||
|
||||
void Server::createRooms(Json::Value roomList) {
|
||||
auto self = shared_from_this();
|
||||
bool created = false;
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace Yc {
|
||||
~Server();
|
||||
void run();
|
||||
void stop();
|
||||
void reloadRooms();
|
||||
std::vector<std::string> roomList();
|
||||
Json::Value jsonRoomList();
|
||||
bool roomAllowed(std::string roomName, std::string userName, std::string password);
|
||||
|
||||
@@ -435,6 +435,32 @@ void SSLServer::createRooms() {
|
||||
}
|
||||
}
|
||||
|
||||
void SSLServer::reloadRooms() {
|
||||
std::cout << "[YourChat] Reloading rooms from database..." << std::endl;
|
||||
|
||||
// Clear existing rooms
|
||||
_rooms.clear();
|
||||
|
||||
// Try to load rooms from database first
|
||||
try {
|
||||
Json::Value dbRooms = _database->getRooms();
|
||||
if (dbRooms.isArray() && dbRooms.size() > 0) {
|
||||
for (const auto& room : dbRooms) {
|
||||
auto newRoom = std::make_shared<ChatRoom>(nullptr, room);
|
||||
_rooms.push_back(newRoom);
|
||||
}
|
||||
std::cout << "[YourChat] Loaded " << _rooms.size() << " rooms from database" << std::endl;
|
||||
return;
|
||||
}
|
||||
} catch (const std::exception& e) {
|
||||
std::cerr << "[YourChat] Failed to load rooms from database: " << e.what() << std::endl;
|
||||
}
|
||||
|
||||
// Fallback to config or default rooms
|
||||
createRooms();
|
||||
std::cout << "[YourChat] Fallback to config/default rooms: " << _rooms.size() << " rooms loaded" << std::endl;
|
||||
}
|
||||
|
||||
std::vector<std::string> SSLServer::roomList() {
|
||||
std::vector<std::string> list;
|
||||
for (const auto &room: _rooms) {
|
||||
|
||||
@@ -39,6 +39,7 @@ public:
|
||||
void run();
|
||||
void stop();
|
||||
void createRooms();
|
||||
void reloadRooms();
|
||||
|
||||
// Room management
|
||||
std::vector<std::string> roomList();
|
||||
|
||||
Reference in New Issue
Block a user