Skip to content

Commit

Permalink
[feat] change set manager functions
Browse files Browse the repository at this point in the history
  • Loading branch information
ChunelFeng committed Dec 9, 2023
1 parent 10ffbc2 commit 41d4853
Show file tree
Hide file tree
Showing 13 changed files with 75 additions and 46 deletions.
4 changes: 2 additions & 2 deletions src/GraphCtrl/GraphElement/GAdapter/GSingleton/GSingleton.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ class GSingleton : public GAdapter {
const std::string &name,
CSize loop) override;

GElementPtr setManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager) override;
CStatus addManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager) override;

private:
static USingleton<T> s_singleton_; // 单例
Expand Down
15 changes: 9 additions & 6 deletions src/GraphCtrl/GraphElement/GAdapter/GSingleton/GSingleton.inl
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,16 @@ CStatus GSingleton<T>::addElementInfo(const std::set<GElementPtr> &dependElement


template <typename T>
GElementPtr GSingleton<T>::setManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager) {
CGRAPH_ASSERT_INIT_THROW_ERROR(false)
CGRAPH_ASSERT_NOT_NULL_THROW_ERROR(paramManager, eventManager)
CStatus GSingleton<T>::addManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager) {
CGRAPH_FUNCTION_BEGIN

CGRAPH_ASSERT_INIT(false)
CGRAPH_ASSERT_NOT_NULL(paramManager, eventManager)
auto element = dynamic_cast<GElementPtr>(s_singleton_.get());
element->setManagers(paramManager, eventManager);
return this;
status = element->addManagers(paramManager, eventManager);

CGRAPH_FUNCTION_END
}

CGRAPH_NAMESPACE_END
Expand Down
18 changes: 12 additions & 6 deletions src/GraphCtrl/GraphElement/GElement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,11 @@ CBool GElement::isAsync() const {
}


CBool GElement::isRegistered() const {
return (nullptr != param_manager_) && (nullptr != event_manager_);
}


CStatus GElement::addDependGElements(const GElementPtrSet& elements) {
CGRAPH_FUNCTION_BEGIN
if (!isMutable()) {
Expand Down Expand Up @@ -191,18 +196,19 @@ CStatus GElement::addElementInfo(const GElementPtrSet& dependElements,
}


GElementPtr GElement::setManagers(GParamManagerPtr paramManager, GEventManagerPtr eventManager) {
CGRAPH_ASSERT_INIT_THROW_ERROR(false)
CGRAPH_ASSERT_NOT_NULL_THROW_ERROR(paramManager, eventManager)
CStatus GElement::addManagers(GParamManagerPtr paramManager, GEventManagerPtr eventManager) {
CGRAPH_FUNCTION_BEGIN
CGRAPH_ASSERT_INIT(false)
CGRAPH_ASSERT_NOT_NULL(paramManager, eventManager)

this->param_manager_ = paramManager;
this->event_manager_ = eventManager;
this->setGParamManager(paramManager);
this->setGEventManager(eventManager);
if (aspect_manager_) {
aspect_manager_->setGParamManager(paramManager);
aspect_manager_->setGEventManager(eventManager);
}

return this;
CGRAPH_FUNCTION_END
}


Expand Down
10 changes: 8 additions & 2 deletions src/GraphCtrl/GraphElement/GElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,12 @@ class GElement : public GElementObject,
*/
CBool isAsync() const;

/**
* 判断当前element是否已经被注册到特定pipeline中了。避免反复注册的问题
* @return
*/
CBool isRegistered() const;

/**
* 执行切面逻辑
* @param aspectType
Expand All @@ -275,8 +281,8 @@ class GElement : public GElementObject,
* @param eventManager
* @return
*/
virtual GElement* setManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager);
virtual CStatus addManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager);

/**
* 包含切面相关功能的函数,fat取自fatjar的意思
Expand Down
9 changes: 0 additions & 9 deletions src/GraphCtrl/GraphElement/GElementRepository.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,6 @@ GElementRepositoryPtr GElementRepository::setThreadPool(UThreadPoolPtr ptr) {
}


GElementRepositoryPtr GElementRepository::setManagers(GParamManagerPtr paramManager, GEventManagerPtr eventManager) {
CGRAPH_ASSERT_NOT_NULL_THROW_ERROR(paramManager, eventManager);
for (auto* cur : this->elements_) {
cur->setManagers(paramManager, eventManager);
}
return this;
}


CStatus GElementRepository::setup() {
CGRAPH_FUNCTION_BEGIN
// 一旦执行,全部设置为 normal状态
Expand Down
8 changes: 0 additions & 8 deletions src/GraphCtrl/GraphElement/GElementRepository.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,6 @@ class GElementRepository : public GElementObject {
*/
GElementRepository* setThreadPool(UThreadPoolPtr ptr);

/**
* 给所有的element,设定manager信息
* @param paramManager
* @param eventManager
* @return
*/
GElementRepository* setManagers(GParamManagerPtr paramManager, GEventManagerPtr eventManager);

/**
* 准备执行流程
* @return
Expand Down
17 changes: 14 additions & 3 deletions src/GraphCtrl/GraphElement/GGroup/GGroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,20 @@ CBool GGroup::isSerializable() {
}


CBool GGroup::isRegistered() {
// 被注册的过group,这两个manager是不会为空的
return (nullptr != param_manager_) && (nullptr != event_manager_);
CStatus GGroup::addManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager) {
CGRAPH_FUNCTION_BEGIN
CGRAPH_ASSERT_NOT_NULL(paramManager, eventManager)
CGRAPH_ASSERT_INIT(false)

this->setGParamManager(paramManager);
this->setGEventManager(eventManager);
for (auto* cur : group_elements_arr_) {
CGRAPH_ASSERT_NOT_NULL(cur)
status += cur->addManagers(paramManager, eventManager);
}

CGRAPH_FUNCTION_END
}

CGRAPH_NAMESPACE_END
9 changes: 3 additions & 6 deletions src/GraphCtrl/GraphElement/GGroup/GGroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,12 @@ class GGroup : public GElement {

CBool isSerializable() override;

/**
* 判断当前group是否已经被注册到特定pipeline中了。避免反复注册的问题
* @return
*/
CBool isRegistered();

private:
explicit GGroup();

CStatus addManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager) override;

CStatus init() override;

CStatus destroy() override;
Expand Down
17 changes: 17 additions & 0 deletions src/GraphCtrl/GraphElement/GGroup/GRegion/GRegion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,21 @@ CBool GRegion::isSerializable() {
return manager_->checkSerializable();
}


CStatus GRegion::addManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager) {
CGRAPH_FUNCTION_BEGIN
CGRAPH_ASSERT_INIT(false)
CGRAPH_ASSERT_NOT_NULL(paramManager, eventManager)

this->setGParamManager(paramManager);
this->setGEventManager(eventManager);
for (auto* cur : manager_->manager_elements_) {
CGRAPH_ASSERT_NOT_NULL(cur)
status += cur->addManagers(paramManager, eventManager);
}

CGRAPH_FUNCTION_END
}

CGRAPH_NAMESPACE_END
3 changes: 3 additions & 0 deletions src/GraphCtrl/GraphElement/GGroup/GRegion/GRegion.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ class GRegion : public GGroup {

CBool isSerializable() final;

CStatus addManagers(GParamManagerPtr paramManager,
GEventManagerPtr eventManager) final;

private:
GElementManagerPtr manager_ = nullptr; // region 内部通过 manager来管理其中的 element 信息

Expand Down
1 change: 1 addition & 0 deletions src/GraphCtrl/GraphElement/GNode/GNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ GNode* GNode::setType(const GNodeType& type) {
CStatus GNode::spawn(const UTaskGroup& tasks, CMSec ttl) {
CGRAPH_FUNCTION_BEGIN
CGRAPH_ASSERT_INIT(true)
CGRAPH_ASSERT_NOT_NULL(thread_pool_)

status = thread_pool_->submit(tasks, ttl);
CGRAPH_FUNCTION_END
Expand Down
6 changes: 3 additions & 3 deletions src/GraphCtrl/GraphPipeline/GPipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ CStatus GPipeline::registerGGroup(GElementPPtr groupRef, const GElementPtrSet &d

status = group->addElementInfo(dependElements, name, loop);
CGRAPH_FUNCTION_CHECK_STATUS
status = group->addManagers(param_manager_, event_manager_);
CGRAPH_FUNCTION_CHECK_STATUS
status = element_manager_->add(group);
CGRAPH_FUNCTION_CHECK_STATUS
repository_.insert(group);
Expand Down Expand Up @@ -278,7 +280,7 @@ GPipelineState GPipeline::getCurState() const {

CStatus GPipeline::initEnv() {
CGRAPH_FUNCTION_BEGIN
CGRAPH_ASSERT_NOT_NULL(event_manager_, element_manager_, param_manager_)
CGRAPH_ASSERT_NOT_NULL(event_manager_, element_manager_)

status = schedule_.init();
CGRAPH_FUNCTION_CHECK_STATUS
Expand All @@ -290,8 +292,6 @@ CStatus GPipeline::initEnv() {

// 设置所有的element 中的thread_pool
repository_.setThreadPool(tp);
repository_.setManagers(param_manager_, event_manager_);

status += repository_.init();
CGRAPH_FUNCTION_END
}
Expand Down
4 changes: 3 additions & 1 deletion src/GraphCtrl/GraphPipeline/GPipeline.inl
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ CStatus GPipeline::registerGElement(GElementPPtr elementRef,
* 2,未被注册到其他的pipeline中
*/
if ((*elementRef) != nullptr
&& ((GGroupPtr)(*elementRef))->isRegistered()) {
&& ((*elementRef)->isRegistered())) {
CGRAPH_RETURN_ERROR_STATUS("this group register duplicate")
}
} else if (std::is_base_of<GNode, T>::value || std::is_base_of<GAdapter, T>::value) {
Expand All @@ -45,6 +45,8 @@ CStatus GPipeline::registerGElement(GElementPPtr elementRef,
CGRAPH_ASSERT_NOT_NULL(*elementRef)
status = (*elementRef)->addElementInfo(dependElements, name, loop);
CGRAPH_FUNCTION_CHECK_STATUS
status = (*elementRef)->addManagers(param_manager_, event_manager_); // 每次注册进来之后,需要记录一下。被重新注册
CGRAPH_FUNCTION_CHECK_STATUS

status = element_manager_->add(dynamic_cast<GElementPtr>(*elementRef));
CGRAPH_FUNCTION_CHECK_STATUS
Expand Down

0 comments on commit 41d4853

Please sign in to comment.