19#if KCENON_WITH_THREAD_SYSTEM
33 std::shared_ptr<integration::logger_interface>
logger_;
34 std::shared_ptr<integration::monitoring_interface>
monitoring_;
46 : pimpl_(new
impl(), [](
impl*) { }) {
61 std::lock_guard<std::mutex> lock(
pimpl_->mutex_);
63 if (
pimpl_->initialized_) {
68 if (!
pimpl_->thread_pool_) {
69 if (thread_count == 0) {
70 thread_count = std::thread::hardware_concurrency();
71 if (thread_count == 0) {
76#if KCENON_WITH_THREAD_SYSTEM
79 auto adapter = integration::thread_system_pool_adapter::from_service_or_default(
"network_pool");
80 if (adapter && adapter->is_running()) {
81 pimpl_->thread_pool_ = adapter;
82 pimpl_->owns_thread_pool_ =
false;
85 pimpl_->thread_pool_ = std::make_shared<integration::basic_thread_pool>(thread_count);
86 pimpl_->owns_thread_pool_ =
true;
90 pimpl_->thread_pool_ = std::make_shared<integration::basic_thread_pool>(thread_count);
91 pimpl_->owns_thread_pool_ =
true;
95 pimpl_->thread_pool_ = std::make_shared<integration::basic_thread_pool>(thread_count);
96 pimpl_->owns_thread_pool_ =
true;
103#if KCENON_WITH_COMMON_SYSTEM
104 pimpl_->logger_ = std::make_shared<integration::common_system_logger_adapter>();
106 pimpl_->logger_ = std::make_shared<integration::basic_logger>(
114 if (!
pimpl_->monitoring_) {
118 pimpl_->initialized_ =
true;
123 "network_context initialized with " + std::to_string(thread_count) +
" threads"
129 std::lock_guard<std::mutex> lock(
pimpl_->mutex_);
131 if (!
pimpl_->initialized_) {
139 if (
pimpl_->monitoring_) {
140 pimpl_->monitoring_.reset();
144 if (
pimpl_->owns_thread_pool_ &&
pimpl_->thread_pool_) {
147 basic_pool->stop(
true);
149 pimpl_->thread_pool_.reset();
154 pimpl_->initialized_ =
false;
158 std::lock_guard<std::mutex> lock(
pimpl_->mutex_);
159 return pimpl_->initialized_;
163 std::lock_guard<std::mutex> lock(
pimpl_->mutex_);
164 pimpl_->thread_pool_ = pool;
165 pimpl_->owns_thread_pool_ =
false;
169 std::lock_guard<std::mutex> lock(
pimpl_->mutex_);
170 return pimpl_->thread_pool_;
174 std::lock_guard<std::mutex> lock(
pimpl_->mutex_);
180 std::lock_guard<std::mutex> lock(
pimpl_->mutex_);
185 std::lock_guard<std::mutex> lock(
pimpl_->mutex_);
186 pimpl_->monitoring_ = monitoring;
192 std::lock_guard<std::mutex> lock(
pimpl_->mutex_);
193 if (!
pimpl_->monitoring_) {
197 return pimpl_->monitoring_;
std::shared_ptr< integration::thread_pool_interface > thread_pool_
std::shared_ptr< integration::monitoring_interface > monitoring_
std::shared_ptr< integration::logger_interface > logger_
Global context for shared network system resources.
void shutdown()
Shutdown all systems.
std::shared_ptr< kcenon::network::integration::monitoring_interface > get_monitoring()
Get current monitoring system.
void set_monitoring(std::shared_ptr< kcenon::network::integration::monitoring_interface > monitoring)
Set custom monitoring system.
std::shared_ptr< impl > pimpl_
PIMPL pointer with intentional leak pattern.
std::shared_ptr< kcenon::network::integration::logger_interface > get_logger()
Get current logger.
void initialize(size_t thread_count=0)
Initialize all systems.
void set_logger(std::shared_ptr< kcenon::network::integration::logger_interface > logger)
Set custom logger.
void set_thread_pool(std::shared_ptr< kcenon::network::integration::thread_pool_interface > pool)
Set custom thread pool.
std::shared_ptr< kcenon::network::integration::thread_pool_interface > get_thread_pool()
Get current thread pool.
static network_context & instance()
Get the singleton instance.
bool is_initialized() const
Check if context is initialized.
Basic thread pool implementation for standalone use.
static logger_integration_manager & instance()
Get the singleton instance.
void set_logger(std::shared_ptr< logger_interface > logger)
Set the logger implementation.
std::shared_ptr< monitoring_interface > get_monitoring()
Get the current monitoring implementation.
static monitoring_integration_manager & instance()
Get the singleton instance.
void set_monitoring(std::shared_ptr< monitoring_interface > monitoring)
Set the monitoring implementation.
Feature flags for network_system.
Global context for shared network system resources.
Adapter that bridges thread_system::thread_pool to thread_pool_interface.