Horizon Official Technical Documentation
Horizon::Zone::PersistenceManager Class Reference

#include <PersistenceManager.hpp>

+ Inheritance diagram for Horizon::Zone::PersistenceManager:
+ Collaboration diagram for Horizon::Zone::PersistenceManager:

Public Member Functions

 PersistenceManager ()
 
void initialize (int segment_number=1) override
 
void finalize () override
 
void start ()
 
void update (uint64_t diff)
 
bool is_initialized () override
 
bool is_finalized () override
 
ResourceManagerget_resource_manager ()
 
- Public Member Functions inherited from KernelComponent
 KernelComponent (Kernel *kernel, Horizon::System::runtime_module_type module_type)
 
virtual void initialize (int segment_number=1)
 
virtual void finalize ()
 
virtual bool is_initialized ()
 
virtual bool is_finalized ()
 
void set_segment_number (int64_t segment_number)
 
int64_t get_segment_number ()
 
void system_routine_queue_push (std::shared_ptr< Horizon::System::RuntimeContext > context)
 
void system_routine_queue_push (std::shared_ptr< Horizon::System::RuntimeContextChain > context)
 
void system_routine_process_queue ()
 
void system_routine_register (Horizon::System::runtime_module_type module_t, Horizon::System::runtime_synchronization_method sync_t, std::shared_ptr< Horizon::System::RuntimeContext > context)
 
const std::string get_uuid_string ()
 
const std::string get_type_string ()
 
Horizon::System::SystemRoutineManagerget_system_routine_manager ()
 
Kernelget_kernel ()
 
void set_thread_cpu_id (int cpu_id)
 
int get_thread_cpu_id ()
 
void set_thread_update_rate (double rate)
 
double get_thread_update_rate ()
 
void set_total_execution_time (int time)
 
int get_total_execution_time ()
 
void calculate_and_set_cpu_load ()
 

Protected Types

using PrimaryResource = SharedPriorityResourceMedium< s_segment_storage< uint64_t, std::shared_ptr< Units::Player > > >
 
using ResourceManager = SharedPriorityResourceManager< PrimaryResource >
 

Protected Attributes

ResourceManager _resource_manager
 

Private Attributes

std::thread _thread
 
std::atomic< bool > _is_initialized {false}
 
std::atomic< bool > _is_finalized {false}
 

Member Typedef Documentation

◆ PrimaryResource

◆ ResourceManager

Constructor & Destructor Documentation

◆ PersistenceManager()

PersistenceManager::PersistenceManager ( )
44_resource_manager(PrimaryResource(RESOURCE_PRIORITY_PRIMARY, std::make_shared<s_segment_storage<uint64_t, std::shared_ptr<Units::Player>>>()))
45{
46}
@ RESOURCE_PRIORITY_PRIMARY
Definition: Server.hpp:79
#define sZone
Definition: Zone.hpp:247
ResourceManager _resource_manager
Definition: PersistenceManager.hpp:63
SharedPriorityResourceMedium< s_segment_storage< uint64_t, std::shared_ptr< Units::Player > > > PrimaryResource
Definition: PersistenceManager.hpp:61
KernelComponent(Kernel *kernel, Horizon::System::runtime_module_type module_type)
Definition: Server.hpp:194
@ RUNTIME_PERSISTENCE
Definition: System.hpp:85
Definition: Server.hpp:93

Member Function Documentation

◆ finalize()

void PersistenceManager::finalize ( )
overridevirtual

Reimplemented from KernelComponent.

57{
58 if (_thread.joinable())
59 _thread.join();
60
61 _is_finalized.exchange(true);
62}
std::atomic< bool > _is_finalized
Definition: PersistenceManager.hpp:58
std::thread _thread
Definition: PersistenceManager.hpp:56

References _is_finalized, and _thread.

◆ get_resource_manager()

ResourceManager & Horizon::Zone::PersistenceManager::get_resource_manager ( )
inline
65{ return _resource_manager; }

References _resource_manager.

◆ initialize()

void PersistenceManager::initialize ( int  segment_number = 1)
overridevirtual

Reimplemented from KernelComponent.

49{
50 set_segment_number(segment_number);
51 _thread = std::thread(&PersistenceManager::start, this);
52
53 _is_initialized.exchange(true);
54}
void start()
Definition: PersistenceManager.cpp:64
std::atomic< bool > _is_initialized
Definition: PersistenceManager.hpp:57
void set_segment_number(int64_t segment_number)
Definition: Server.hpp:206

References _is_initialized, _thread, KernelComponent::set_segment_number(), and start().

+ Here is the call graph for this function:

◆ is_finalized()

bool Horizon::Zone::PersistenceManager::is_finalized ( )
inlineoverridevirtual

Reimplemented from KernelComponent.

53{ return _is_finalized.load(); }

References _is_finalized.

◆ is_initialized()

bool Horizon::Zone::PersistenceManager::is_initialized ( )
inlineoverridevirtual

Reimplemented from KernelComponent.

52{ return _is_initialized.load(); }

References _is_initialized.

◆ start()

void PersistenceManager::start ( )
65{
66 while (!sZone->general_conf().is_test_run_minimal() && get_shutdown_stage() == SHUTDOWN_NOT_STARTED) {
67 update(std::time(nullptr));
68 std::this_thread::sleep_for(std::chrono::microseconds(MAX_CORE_UPDATE_INTERVAL));
69 }
70}
#define MAX_CORE_UPDATE_INTERVAL
Definition: Horizon.hpp:63
shutdown_stages get_shutdown_stage()
Definition: Server.hpp:74
@ SHUTDOWN_NOT_STARTED
Definition: Server.hpp:64
void update(uint64_t diff)
Definition: PersistenceManager.cpp:72

References get_shutdown_stage(), MAX_CORE_UPDATE_INTERVAL, SHUTDOWN_NOT_STARTED, sZone, and update().

Referenced by initialize(), and update().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ update()

void PersistenceManager::update ( uint64_t  diff)
73{
74 std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
76#if WIN32
77 DWORD cpu = GetCurrentProcessorNumber();
78 if (get_thread_cpu_id() != (int) cpu)
80#elif __linux__
81 int cpu = sched_getcpu();
82 if (get_thread_cpu_id() != cpu)
84#endif
86 std::chrono::high_resolution_clock::time_point end = std::chrono::high_resolution_clock::now();
87 std::chrono::nanoseconds time_span = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start);
88 set_total_execution_time(time_span.count());
89}
void process_queue()
Definition: System.hpp:676
void set_thread_cpu_id(int cpu_id)
Definition: Server.hpp:239
Horizon::System::SystemRoutineManager & get_system_routine_manager()
Definition: Server.hpp:235
void set_total_execution_time(int time)
Definition: Server.hpp:245
void calculate_and_set_cpu_load()
Definition: Server.hpp:257
int get_thread_cpu_id()
Definition: Server.hpp:240

References KernelComponent::calculate_and_set_cpu_load(), KernelComponent::get_system_routine_manager(), KernelComponent::get_thread_cpu_id(), Horizon::System::SystemRoutineManager::process_queue(), KernelComponent::set_thread_cpu_id(), KernelComponent::set_total_execution_time(), and start().

Referenced by start().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ _is_finalized

std::atomic<bool> Horizon::Zone::PersistenceManager::_is_finalized {false}
private

Referenced by finalize(), and is_finalized().

◆ _is_initialized

std::atomic<bool> Horizon::Zone::PersistenceManager::_is_initialized {false}
private

Referenced by initialize(), and is_initialized().

◆ _resource_manager

ResourceManager Horizon::Zone::PersistenceManager::_resource_manager
protected

Referenced by get_resource_manager().

◆ _thread

std::thread Horizon::Zone::PersistenceManager::_thread
private

Referenced by finalize(), and initialize().


The documentation for this class was generated from the following files: