Skip to content

Commit 8bbddc0

Browse files
committed
[chg] 优化CGraph中切面逻辑的实现方案,目前所有element均可以添加切面
1 parent 0ccdc8f commit 8bbddc0

6 files changed

Lines changed: 65 additions & 54 deletions

File tree

src/GraphCtrl/GraphElement/GElement.cpp

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ const std::string& GElement::getSession() const {
2525

2626
/******** protected ********/
2727
GElement::GElement() {
28-
this->session_ = CGRAPH_GENERATE_SESSION();
28+
this->session_ = CGRAPH_GENERATE_SESSION()
2929
}
3030

3131

3232
GElement::~GElement() {
33-
CGRAPH_DELETE_PTR(aspect_manager_);
33+
CGRAPH_DELETE_PTR(aspect_manager_)
3434
}
3535

3636

@@ -142,7 +142,7 @@ CStatus GElement::addDependElements(const GElementPtrSet& dependElements) {
142142

143143
for (GElementPtr cur: dependElements) {
144144
// 如果传入的信息中,有nullptr,则所有的信息均不参与计算
145-
CGRAPH_ASSERT_NOT_NULL(cur);
145+
CGRAPH_ASSERT_NOT_NULL(cur)
146146
}
147147

148148
for (GElementPtr cur: dependElements) {
@@ -189,4 +189,38 @@ CStatus GElement::doAspect(const GAspectType& aspectType, const CStatus& curStat
189189
CGRAPH_FUNCTION_END
190190
}
191191

192+
193+
CStatus GElement::fatInit() {
194+
CGRAPH_FUNCTION_BEGIN
195+
status = doAspect(GAspectType::BEGIN_INIT);
196+
CGRAPH_FUNCTION_CHECK_STATUS
197+
198+
status = init();
199+
doAspect(GAspectType::FINISH_INIT, status);
200+
CGRAPH_FUNCTION_END
201+
}
202+
203+
204+
CStatus GElement::fatRun() {
205+
CGRAPH_FUNCTION_BEGIN
206+
status = doAspect(GAspectType::BEGIN_RUN);
207+
CGRAPH_FUNCTION_CHECK_STATUS
208+
209+
status = run();
210+
doAspect(GAspectType::FINISH_RUN, status);
211+
CGRAPH_FUNCTION_END
212+
}
213+
214+
215+
CStatus GElement::fatDestroy() {
216+
CGRAPH_FUNCTION_BEGIN
217+
status = doAspect(GAspectType::BEGIN_DESTROY);
218+
CGRAPH_FUNCTION_CHECK_STATUS
219+
220+
status = destroy();
221+
doAspect(GAspectType::FINISH_DESTROY, status);
222+
CGRAPH_FUNCTION_END
223+
}
224+
225+
192226
CGRAPH_NAMESPACE_END

src/GraphCtrl/GraphElement/GElement.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,24 @@ class GElement : public GraphObject {
168168
GParamManagerPtr paramManager,
169169
UThreadPoolPtr threadPool);
170170

171+
/**
172+
* 包含相关功能的初始化
173+
* @return
174+
*/
175+
CStatus fatInit();
176+
177+
/**
178+
* 包含相关功能的执行方式,比如添加切面
179+
* @return
180+
*/
181+
CStatus fatRun();
182+
183+
/**
184+
* 包含相关功能的销毁函数
185+
* @return
186+
*/
187+
CStatus fatDestroy();
188+
171189

172190
protected:
173191
bool done_ { false }; // 判定被执行结束

src/GraphCtrl/GraphElement/GElementManager.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,7 @@ CStatus GElementManager::init() {
4040
for (GElementPtr element : manager_elements_) {
4141
CGRAPH_ASSERT_NOT_NULL(element)
4242

43-
status = element->doAspect(GAspectType::BEGIN_INIT);
44-
CGRAPH_FUNCTION_CHECK_STATUS
45-
status = element->init();
46-
element->doAspect(GAspectType::FINISH_INIT, status);
43+
status = element->fatInit();
4744
CGRAPH_FUNCTION_CHECK_STATUS
4845
}
4946

@@ -57,10 +54,7 @@ CStatus GElementManager::destroy() {
5754
for (GElementPtr element : manager_elements_) {
5855
CGRAPH_ASSERT_NOT_NULL(element)
5956

60-
status = element->doAspect(GAspectType::BEGIN_DESTROY);
61-
CGRAPH_FUNCTION_CHECK_STATUS
62-
status = element->destroy();
63-
element->doAspect(GAspectType::FINISH_DESTROY, status);
57+
status = element->fatDestroy();
6458
CGRAPH_FUNCTION_CHECK_STATUS
6559
}
6660

src/GraphCtrl/GraphElement/GGroup/GCluster/GCluster.cpp

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ CStatus GCluster::init() {
3838

3939
for (GElementPtr element : cluster_elements_) {
4040
CGRAPH_ASSERT_NOT_NULL(element)
41-
status = element->doAspect(GAspectType::BEGIN_INIT);
42-
CGRAPH_FUNCTION_CHECK_STATUS
43-
44-
status = element->init();
45-
element->doAspect(GAspectType::FINISH_INIT, status);
41+
status = element->fatInit();
4642
CGRAPH_FUNCTION_CHECK_STATUS
4743
}
4844

@@ -56,11 +52,7 @@ CStatus GCluster::destroy() {
5652

5753
for (GElementPtr element : cluster_elements_) {
5854
CGRAPH_ASSERT_NOT_NULL(element)
59-
status = element->doAspect(GAspectType::BEGIN_DESTROY);
60-
CGRAPH_FUNCTION_CHECK_STATUS
61-
62-
status = element->destroy();
63-
element->doAspect(GAspectType::FINISH_DESTROY, status);
55+
status = element->fatDestroy();
6456
CGRAPH_FUNCTION_CHECK_STATUS
6557
}
6658

@@ -75,11 +67,7 @@ CStatus GCluster::run() {
7567
CSize elementLoop = element->loop_;
7668
while (elementLoop--) {
7769
// element需要被执行loop次
78-
status = element->doAspect(GAspectType::BEGIN_RUN);
79-
CGRAPH_FUNCTION_CHECK_STATUS
80-
81-
status = element->run();
82-
element->doAspect(GAspectType::FINISH_RUN, status);
70+
status = element->fatRun();
8371
CGRAPH_FUNCTION_CHECK_STATUS
8472
}
8573
}
@@ -100,11 +88,7 @@ CStatus GCluster::process(bool isMock) {
10088
CSize clusterLoop = element->loop_;
10189
while (clusterLoop-- > 0) {
10290
// cluster 需要被执行loop次
103-
status = element->doAspect(GAspectType::BEGIN_RUN);
104-
CGRAPH_FUNCTION_CHECK_STATUS
105-
106-
status = element->run();
107-
element->doAspect(GAspectType::FINISH_RUN, status);
91+
status = element->fatRun();
10892
CGRAPH_FUNCTION_CHECK_STATUS
10993
}
11094
}

src/GraphCtrl/GraphElement/GGroup/GCondition/GCondition.cpp

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@ CStatus GCondition::init() {
1515

1616
for (GElementPtr element : this->condition_elements_) {
1717
/** init和destroy的时候,切面全部执行。run的时候,仅执行被执行的切面 */
18-
status = element->doAspect(GAspectType::BEGIN_INIT);
19-
CGRAPH_FUNCTION_CHECK_STATUS
20-
21-
status = element->init();
22-
element->doAspect(GAspectType::FINISH_INIT, status);
18+
status = element->fatInit();
2319
CGRAPH_FUNCTION_CHECK_STATUS
2420
}
2521

@@ -31,11 +27,7 @@ CStatus GCondition::destroy() {
3127
CGRAPH_FUNCTION_BEGIN
3228

3329
for (GElementPtr element : this->condition_elements_) {
34-
status = element->doAspect(GAspectType::BEGIN_INIT);
35-
CGRAPH_FUNCTION_CHECK_STATUS
36-
37-
status = element->destroy();
38-
element->doAspect(GAspectType::FINISH_INIT, status);
30+
status = element->fatDestroy();
3931
CGRAPH_FUNCTION_CHECK_STATUS
4032
}
4133

@@ -63,23 +55,15 @@ CStatus GCondition::run() {
6355
loop = condition_elements_.back()->loop_;
6456
while (loop-- > 0) {
6557
auto element = condition_elements_.back();
66-
status = element->doAspect(GAspectType::BEGIN_RUN);
67-
CGRAPH_FUNCTION_CHECK_STATUS
68-
69-
status = element->run();
70-
element->doAspect(GAspectType::FINISH_RUN, status);
58+
status = element->fatRun();
7159
CGRAPH_FUNCTION_CHECK_STATUS
7260
}
7361
} else if (0 <= index && index < condition_elements_.size()) {
7462
// 如果返回的内容,在元素范围之内,则直接执行元素的内容。不在的话,则不执行任何操作,直接返回正确状态
7563
loop = condition_elements_[index]->loop_;
7664
while (loop-- > 0) {
7765
auto element = condition_elements_[index];
78-
status = element->doAspect(GAspectType::BEGIN_RUN);
79-
CGRAPH_FUNCTION_CHECK_STATUS
80-
81-
status = element->run();
82-
element->doAspect(GAspectType::FINISH_RUN, status);
66+
status = element->fatRun();
8367
CGRAPH_FUNCTION_CHECK_STATUS
8468
}
8569
}

tutorial/T09-Aspect.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ void tutorial_aspect() {
3232
/** 针对group类型,添加 MyTimerAspect 切面逻辑 */
3333
b_region->addGAspect<MyTimerAspect>();
3434

35-
/** 可以对同一个节点,设置多个切面(可重复添加)。此时,切面会执行多次 */
36-
c->addGAspect<MyTimerAspect>()->addGAspect<MyTimerAspect>()->addGAspect<MyTimerAspect>();
37-
3835
/**
3936
* 给特定的element,统一添加 MyTraceAspect 类型的切面
4037
* 不传参数,表示对pipeline内部所有的节点,添加该切面

0 commit comments

Comments
 (0)