mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-08-06 10:44:08 +00:00
chore: cleanup objectIdManager overloading and classes (#1391)
* objectIdManager fixes * Remove debug log
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
set(DMASTERSERVER_SOURCES
|
||||
"InstanceManager.cpp"
|
||||
"ObjectIDManager.cpp"
|
||||
"PersistentIDManager.cpp"
|
||||
"Start.cpp"
|
||||
)
|
||||
|
||||
|
@@ -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()) {
|
||||
|
@@ -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();
|
||||
};
|
@@ -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);
|
||||
}
|
23
dMasterServer/PersistentIDManager.h
Normal file
23
dMasterServer/PersistentIDManager.h
Normal 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();
|
||||
};
|
Reference in New Issue
Block a user