From 31fc827672a131da020c4b4a0c3c8a145d477835 Mon Sep 17 00:00:00 2001 From: saturneric Date: Mon, 23 Oct 2023 14:29:25 +0800 Subject: feat: improve project structure and add GRT for modules --- src/core/module/ModuleManager.cpp | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'src/core/module/ModuleManager.cpp') diff --git a/src/core/module/ModuleManager.cpp b/src/core/module/ModuleManager.cpp index f578e67c..0bf9e972 100644 --- a/src/core/module/ModuleManager.cpp +++ b/src/core/module/ModuleManager.cpp @@ -28,7 +28,10 @@ #include "ModuleManager.h" +#include + #include "core/module/GlobalModuleContext.h" +#include "core/module/GlobalRegisterTable.h" #include "core/module/Module.h" #include "core/thread/TaskRunner.h" @@ -40,15 +43,16 @@ class ModuleManager::Impl { public: Impl() : task_runner_(std::make_shared()), - gpc_(std::make_shared(task_runner_)) { + gmc_(std::make_shared(task_runner_)), + grt_(std::make_shared()) { task_runner_->Start(); } void RegisterModule(ModulePtr module) { task_runner_->PostTask(new Thread::Task( std::move([=](GpgFrontend::Thread::DataObjectPtr) -> int { - module->SetGPC(gpc_); - gpc_->RegisterModule(module); + module->SetGPC(gmc_); + gmc_->RegisterModule(module); return 0; }), __func__, nullptr)); @@ -57,7 +61,7 @@ class ModuleManager::Impl { void TriggerEvent(EventRefrernce event) { task_runner_->PostTask(new Thread::Task( std::move([=](GpgFrontend::Thread::DataObjectPtr) -> int { - gpc_->TriggerEvent(event); + gmc_->TriggerEvent(event); return 0; }), __func__, nullptr)); @@ -66,20 +70,29 @@ class ModuleManager::Impl { void ActiveModule(ModuleIdentifier identifier) { task_runner_->PostTask(new Thread::Task( std::move([=](GpgFrontend::Thread::DataObjectPtr) -> int { - gpc_->ActiveModule(identifier); + gmc_->ActiveModule(identifier); return 0; }), __func__, nullptr)); } std::optional GetTaskRunner(ModuleIdentifier module_id) { - return gpc_->GetTaskRunner(module_id); + return gmc_->GetTaskRunner(module_id); + } + + bool UpsertRTValue(Namespace n, Key k, std::any v) { + return grt_->PublishKV(n, k, v); + } + + std::optional RetrieveRTValue(Namespace n, Key k) { + return grt_->LookupKV(n, k); } private: static ModuleMangerPtr global_module_manager_; TaskRunnerPtr task_runner_; - GlobalModuleContextPtr gpc_; + GMCPtr gmc_; + GRTPtr grt_; }; ModuleManager::ModuleManager() : p_(std::make_unique()) {} @@ -108,4 +121,12 @@ std::optional ModuleManager::GetTaskRunner( return p_->GetTaskRunner(module_id); } +bool ModuleManager::UpsertRTValue(Namespace n, Key k, std::any v) { + return p_->UpsertRTValue(n, k, v); +} + +std::optional ModuleManager::RetrieveRTValue(Namespace n, Key k) { + return p_->RetrieveRTValue(n, k); +} + } // namespace GpgFrontend::Module \ No newline at end of file -- cgit v1.2.3