From 88d968a533ab0731f292d823c22cc58ec39a9409 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Fri, 22 Aug 2025 20:04:21 -0500 Subject: [PATCH] Run NTP client in the background --- scwx-qt/scwx-qt.cmake | 2 ++ scwx-qt/source/scwx/qt/main/main.cpp | 3 ++ .../source/scwx/qt/manager/task_manager.cpp | 29 +++++++++++++++++++ .../source/scwx/qt/manager/task_manager.hpp | 9 ++++++ wxdata/include/scwx/network/ntp_client.hpp | 4 ++- wxdata/source/scwx/network/ntp_client.cpp | 8 +++++ 6 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 scwx-qt/source/scwx/qt/manager/task_manager.cpp create mode 100644 scwx-qt/source/scwx/qt/manager/task_manager.hpp diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index 194601e9..ecd26ef9 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -109,6 +109,7 @@ set(HDR_MANAGER source/scwx/qt/manager/alert_manager.hpp source/scwx/qt/manager/radar_product_manager_notifier.hpp source/scwx/qt/manager/resource_manager.hpp source/scwx/qt/manager/settings_manager.hpp + source/scwx/qt/manager/task_manager.hpp source/scwx/qt/manager/text_event_manager.hpp source/scwx/qt/manager/thread_manager.hpp source/scwx/qt/manager/timeline_manager.hpp @@ -126,6 +127,7 @@ set(SRC_MANAGER source/scwx/qt/manager/alert_manager.cpp source/scwx/qt/manager/radar_product_manager_notifier.cpp source/scwx/qt/manager/resource_manager.cpp source/scwx/qt/manager/settings_manager.cpp + source/scwx/qt/manager/task_manager.cpp source/scwx/qt/manager/text_event_manager.cpp source/scwx/qt/manager/thread_manager.cpp source/scwx/qt/manager/timeline_manager.cpp diff --git a/scwx-qt/source/scwx/qt/main/main.cpp b/scwx-qt/source/scwx/qt/main/main.cpp index b255c7b6..a2416cec 100644 --- a/scwx-qt/source/scwx/qt/main/main.cpp +++ b/scwx-qt/source/scwx/qt/main/main.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -121,6 +122,7 @@ int main(int argc, char* argv[]) // Initialize application scwx::qt::config::RadarSite::Initialize(); scwx::qt::config::CountyDatabase::Initialize(); + scwx::qt::manager::TaskManager::Initialize(); scwx::qt::manager::SettingsManager::Instance().Initialize(); scwx::qt::manager::ResourceManager::Initialize(); @@ -181,6 +183,7 @@ int main(int argc, char* argv[]) // Shutdown application scwx::qt::manager::ResourceManager::Shutdown(); scwx::qt::manager::SettingsManager::Instance().Shutdown(); + scwx::qt::manager::TaskManager::Shutdown(); // Shutdown AWS SDK Aws::ShutdownAPI(awsSdkOptions); diff --git a/scwx-qt/source/scwx/qt/manager/task_manager.cpp b/scwx-qt/source/scwx/qt/manager/task_manager.cpp new file mode 100644 index 00000000..130318f5 --- /dev/null +++ b/scwx-qt/source/scwx/qt/manager/task_manager.cpp @@ -0,0 +1,29 @@ +#include +#include +#include + +namespace scwx::qt::manager::TaskManager +{ + +static const std::string logPrefix_ = "scwx::qt::manager::task_manager"; +static const auto logger_ = scwx::util::Logger::Create(logPrefix_); + +static std::shared_ptr ntpClient_ {}; + +void Initialize() +{ + logger_->debug("Initialize"); + + ntpClient_ = network::NtpClient::Instance(); + + ntpClient_->Start(); +} + +void Shutdown() +{ + logger_->debug("Shutdown"); + + ntpClient_->Stop(); +} + +} // namespace scwx::qt::manager::TaskManager diff --git a/scwx-qt/source/scwx/qt/manager/task_manager.hpp b/scwx-qt/source/scwx/qt/manager/task_manager.hpp new file mode 100644 index 00000000..bb50fb3b --- /dev/null +++ b/scwx-qt/source/scwx/qt/manager/task_manager.hpp @@ -0,0 +1,9 @@ +#pragma once + +namespace scwx::qt::manager::TaskManager +{ + +void Initialize(); +void Shutdown(); + +} // namespace scwx::qt::manager::TaskManager diff --git a/wxdata/include/scwx/network/ntp_client.hpp b/wxdata/include/scwx/network/ntp_client.hpp index 6a0a78b7..6462a6e9 100644 --- a/wxdata/include/scwx/network/ntp_client.hpp +++ b/wxdata/include/scwx/network/ntp_client.hpp @@ -26,7 +26,9 @@ public: bool error(); std::chrono::system_clock::duration time_offset() const; - void Start(); + void Start(); + void Stop(); + void Open(std::string_view host, std::string_view service); void OpenCurrentServer(); void Poll(); diff --git a/wxdata/source/scwx/network/ntp_client.cpp b/wxdata/source/scwx/network/ntp_client.cpp index 89aba5d0..45c0ad74 100644 --- a/wxdata/source/scwx/network/ntp_client.cpp +++ b/wxdata/source/scwx/network/ntp_client.cpp @@ -191,6 +191,14 @@ void NtpClient::Start() } } +void NtpClient::Stop() +{ + p->enabled_ = false; + p->socket_.cancel(); + p->pollTimer_.cancel(); + p->threadPool_.join(); +} + void NtpClient::Open(std::string_view host, std::string_view service) { p->Open(host, service);