#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 (sql::SQLException& e) { LOG("Unable to fetch max persistent object ID in use. This will cause issues. Aborting to prevent collisions."); LOG("SQL 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); }