mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-08-08 11:44:11 +00:00
chore: cleanup objectIdManager overloading and classes (#1391)
* objectIdManager fixes * Remove debug log
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
set(DWORLDSERVER_SOURCES
|
||||
"ObjectIDManager.cpp"
|
||||
"PerformanceManager.cpp"
|
||||
)
|
||||
|
||||
|
@@ -1,55 +0,0 @@
|
||||
#include "ObjectIDManager.h"
|
||||
|
||||
// Custom Classes
|
||||
#include "MasterPackets.h"
|
||||
#include "Database.h"
|
||||
#include "Logger.h"
|
||||
#include "Game.h"
|
||||
|
||||
// Static Variables
|
||||
ObjectIDManager* ObjectIDManager::m_Address = nullptr;
|
||||
static std::uniform_int_distribution<int> uni(10000000, INT32_MAX);
|
||||
|
||||
//! Initializes the manager
|
||||
void ObjectIDManager::Initialize(void) {
|
||||
//this->currentRequestID = 0;
|
||||
this->currentObjectID = uint32_t(1152921508165007067); //Initial value for this server's objectIDs
|
||||
}
|
||||
|
||||
//! Requests a persistent ID
|
||||
void ObjectIDManager::RequestPersistentID(std::function<void(uint32_t)> callback) {
|
||||
PersistentIDRequest* request = new PersistentIDRequest();
|
||||
request->requestID = ++this->currentRequestID;
|
||||
request->callback = callback;
|
||||
|
||||
this->requests.push_back(request);
|
||||
|
||||
MasterPackets::SendPersistentIDRequest(Game::server, request->requestID);
|
||||
}
|
||||
|
||||
//! Handles a persistent ID response
|
||||
void ObjectIDManager::HandleRequestPersistentIDResponse(uint64_t requestID, uint32_t persistentID) {
|
||||
for (uint32_t i = 0; i < this->requests.size(); ++i) {
|
||||
if (this->requests[i]->requestID == requestID) {
|
||||
|
||||
// Call the callback function
|
||||
this->requests[i]->callback(persistentID);
|
||||
|
||||
// Then delete the request
|
||||
delete this->requests[i];
|
||||
this->requests.erase(this->requests.begin() + i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//! Handles cases where we have to get a unique object ID synchronously
|
||||
uint32_t ObjectIDManager::GenerateRandomObjectID() {
|
||||
return uni(Game::randomEngine);
|
||||
}
|
||||
|
||||
|
||||
//! Generates an object ID server-sided (used for regular entities like smashables)
|
||||
uint32_t ObjectIDManager::GenerateObjectID(void) {
|
||||
return ++this->currentObjectID;
|
||||
}
|
@@ -1,75 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// C++
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
#include <stdint.h>
|
||||
|
||||
/*!
|
||||
\file ObjectIDManager.hpp
|
||||
\brief A manager for handling object ID generation
|
||||
*/
|
||||
|
||||
//! The persistent ID request
|
||||
struct PersistentIDRequest {
|
||||
uint64_t requestID;
|
||||
|
||||
std::function<void(uint32_t)> callback;
|
||||
};
|
||||
|
||||
//! The Object ID Manager
|
||||
class ObjectIDManager {
|
||||
private:
|
||||
static ObjectIDManager* m_Address; //!< The singleton instance
|
||||
|
||||
std::vector<PersistentIDRequest*> requests; //!< All outstanding persistent ID requests
|
||||
uint64_t currentRequestID; //!< The current request ID
|
||||
|
||||
uint32_t currentObjectID; //!< The current object ID
|
||||
|
||||
public:
|
||||
|
||||
//! The singleton instance
|
||||
static ObjectIDManager* Instance() {
|
||||
if (m_Address == 0) {
|
||||
m_Address = new ObjectIDManager;
|
||||
}
|
||||
|
||||
return m_Address;
|
||||
}
|
||||
|
||||
//! Initializes the manager
|
||||
void Initialize(void);
|
||||
|
||||
//! Requests a persistent ID
|
||||
/*!
|
||||
\param callback The callback function
|
||||
*/
|
||||
void RequestPersistentID(std::function<void(uint32_t)> callback);
|
||||
|
||||
|
||||
//! Handles a persistent ID response
|
||||
/*!
|
||||
\param requestID The request ID
|
||||
\param persistentID The persistent ID
|
||||
*/
|
||||
void HandleRequestPersistentIDResponse(uint64_t requestID, uint32_t persistentID);
|
||||
|
||||
//! Generates an object ID server-sided
|
||||
/*!
|
||||
\return A generated object ID
|
||||
*/
|
||||
uint32_t GenerateObjectID(void);
|
||||
|
||||
//! Generates a random object ID server-sided
|
||||
/*!
|
||||
\return A generated object ID
|
||||
*/
|
||||
static uint32_t GenerateRandomObjectID();
|
||||
|
||||
//! Generates a persistent object ID server-sided
|
||||
/*!
|
||||
\return A generated object ID
|
||||
*/
|
||||
uint32_t GeneratePersistentObjectID(void);
|
||||
};
|
@@ -208,7 +208,6 @@ int main(int argc, char** argv) {
|
||||
masterPort = masterInfo->port;
|
||||
}
|
||||
|
||||
ObjectIDManager::Instance()->Initialize();
|
||||
UserManager::Instance()->Initialize();
|
||||
|
||||
bool dontGenerateDCF = false;
|
||||
@@ -736,7 +735,7 @@ void HandlePacket(Packet* packet) {
|
||||
case eMasterMessageType::REQUEST_PERSISTENT_ID_RESPONSE: {
|
||||
uint64_t requestID = PacketUtils::ReadU64(8, packet);
|
||||
uint32_t objectID = PacketUtils::ReadU32(16, packet);
|
||||
ObjectIDManager::Instance()->HandleRequestPersistentIDResponse(requestID, objectID);
|
||||
ObjectIDManager::HandleRequestPersistentIDResponse(requestID, objectID);
|
||||
break;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user