chore: cleanup objectIdManager overloading and classes (#1391)

* objectIdManager fixes

* Remove debug log
This commit is contained in:
David Markowitz
2024-01-05 04:31:22 -08:00
committed by GitHub
parent 66ac5a1b7a
commit 870b56fe02
25 changed files with 166 additions and 236 deletions

View File

@@ -1,6 +1,6 @@
set(DMASTERSERVER_SOURCES
"InstanceManager.cpp"
"ObjectIDManager.cpp"
"PersistentIDManager.cpp"
"Start.cpp"
)

View File

@@ -35,7 +35,7 @@
#include "Game.h"
#include "InstanceManager.h"
#include "MasterPackets.h"
#include "ObjectIDManager.h"
#include "PersistentIDManager.h"
#include "PacketUtils.h"
#include "FdbToSqlite.h"
#include "BitStreamUtils.h"
@@ -134,7 +134,7 @@ int main(int argc, char** argv) {
if (!resServerPathExists) {
LOG("%s does not exist, creating it.", (resServerPath).c_str());
if(!std::filesystem::create_directories(resServerPath)){
if (!std::filesystem::create_directories(resServerPath)) {
LOG("Failed to create %s", (resServerPath).string().c_str());
return EXIT_FAILURE;
}
@@ -257,8 +257,8 @@ int main(int argc, char** argv) {
//Create account
try {
Database::Get()->InsertNewAccount(username, std::string(hash, BCRYPT_HASHSIZE));
} catch(sql::SQLException& e) {
LOG("A SQL error occurred!:\n %s", e.what());
} catch (sql::SQLException& e) {
LOG("A SQL error occurred!:\n %s", e.what());
return EXIT_FAILURE;
}
@@ -288,7 +288,7 @@ int main(int argc, char** argv) {
Database::Get()->SetMasterIp(master_server_ip, Game::server->GetPort());
//Create additional objects here:
ObjectIDManager::Instance()->Initialize(Game::logger);
PersistentIDManager::Initialize();
Game::im = new InstanceManager(Game::logger, Game::server->GetIP());
//Depending on the config, start up servers:
@@ -464,7 +464,7 @@ void HandlePacket(Packet* packet) {
uint64_t requestID = 0;
inStream.Read(requestID);
uint32_t objID = ObjectIDManager::Instance()->GeneratePersistentID();
uint32_t objID = PersistentIDManager::GeneratePersistentID();
MasterPackets::SendPersistentIDResponse(Game::server, packet->systemAddress, requestID, objID);
break;
}
@@ -822,11 +822,8 @@ int ShutdownSequence(int32_t signal) {
LOG("Triggered master shutdown");
}
auto* objIdManager = ObjectIDManager::TryInstance();
if (objIdManager) {
objIdManager->SaveToDatabase();
LOG("Saved ObjectIDTracker to DB");
}
PersistentIDManager::SaveToDatabase();
LOG("Saved ObjectIDTracker to DB");
// A server might not be finished spinning up yet, remove all of those here.
for (auto* instance : Game::im->GetInstances()) {

View File

@@ -1,47 +0,0 @@
#pragma once
// C++
#include <cstdint>
class Logger;
/*!
\file ObjectIDManager.hpp
\brief A manager that handles requests for object IDs
*/
//! The Object ID Manager
class ObjectIDManager {
private:
Logger* mLogger;
static ObjectIDManager* m_Address; //!< The singleton instance
uint32_t currentPersistentID; //!< The highest current persistent ID in use
public:
//! Return the singleton if it is initialized
static ObjectIDManager* TryInstance() {
return m_Address;
}
//! The singleton method
static ObjectIDManager* Instance() {
if (m_Address == nullptr) {
m_Address = new ObjectIDManager;
}
return m_Address;
}
//! Initializes the manager
void Initialize(Logger* logger);
//! Generates a new persistent ID
/*!
\return The new persistent ID
*/
uint32_t GeneratePersistentID();
void SaveToDatabase();
};

View File

@@ -1,48 +1,45 @@
#include "ObjectIDManager.h"
#include "PersistentIDManager.h"
// Custom Classes
#include "Database.h"
#include "Logger.h"
#include "Game.h"
// Static Variables
ObjectIDManager* ObjectIDManager::m_Address = nullptr;
namespace {
uint32_t CurrentPersistentID = 1; //!< The highest current persistent ID in use
};
//! Initializes the manager
void ObjectIDManager::Initialize(Logger* logger) {
this->mLogger = logger;
this->currentPersistentID = 1;
void PersistentIDManager::Initialize() {
try {
auto lastObjectId = Database::Get()->GetCurrentPersistentId();
if (!lastObjectId) {
Database::Get()->InsertDefaultPersistentId();
return;
} else {
this->currentPersistentID = lastObjectId.value();
CurrentPersistentID = lastObjectId.value();
}
if (this->currentPersistentID <= 0) {
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;
throw e;
}
}
//! Generates a new persistent ID
uint32_t ObjectIDManager::GeneratePersistentID() {
uint32_t toReturn = ++this->currentPersistentID;
uint32_t PersistentIDManager::GeneratePersistentID() {
uint32_t toReturn = ++CurrentPersistentID;
SaveToDatabase();
return toReturn;
}
void ObjectIDManager::SaveToDatabase() {
Database::Get()->UpdatePersistentId(this->currentPersistentID);
void PersistentIDManager::SaveToDatabase() {
Database::Get()->UpdatePersistentId(CurrentPersistentID);
}

View File

@@ -0,0 +1,23 @@
#pragma once
// C++
#include <cstdint>
/*!
\file PersistentIDManager.h
\brief A manager that handles requests for object IDs
*/
//! The Object ID Manager
namespace PersistentIDManager {
//! Initializes the manager
void Initialize();
//! Generates a new persistent ID
/*!
\return The new persistent ID
*/
uint32_t GeneratePersistentID();
void SaveToDatabase();
};