mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-12-22 21:43:35 +00:00
46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
#include "PersistentIDManager.h"
|
|
|
|
// Custom Classes
|
|
#include "Database.h"
|
|
#include "Logger.h"
|
|
#include "Game.h"
|
|
|
|
namespace {
|
|
uint32_t CurrentPersistentID = 1; //!< The highest current persistent ID in use
|
|
};
|
|
|
|
//! Initializes the manager
|
|
void PersistentIDManager::Initialize() {
|
|
try {
|
|
auto lastObjectId = Database::Get()->GetCurrentPersistentId();
|
|
|
|
if (!lastObjectId) {
|
|
Database::Get()->InsertDefaultPersistentId();
|
|
} else {
|
|
CurrentPersistentID = lastObjectId.value();
|
|
}
|
|
|
|
if (CurrentPersistentID <= 0) {
|
|
LOG("Invalid persistent object ID in database. Aborting to prevent bad id generation.");
|
|
throw std::runtime_error("Invalid persistent object ID in database. Aborting to prevent bad id generation.");
|
|
}
|
|
} catch (std::exception& e) {
|
|
LOG("Unable to fetch max persistent object ID in use. This will cause issues. Aborting to prevent collisions.");
|
|
LOG("Error: %s", e.what());
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
//! Generates a new persistent ID
|
|
uint32_t PersistentIDManager::GeneratePersistentID() {
|
|
uint32_t toReturn = ++CurrentPersistentID;
|
|
|
|
SaveToDatabase();
|
|
|
|
return toReturn;
|
|
}
|
|
|
|
void PersistentIDManager::SaveToDatabase() {
|
|
Database::Get()->UpdatePersistentId(CurrentPersistentID);
|
|
}
|