-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathComponentManager.cpp
More file actions
94 lines (68 loc) · 1.94 KB
/
Copy pathComponentManager.cpp
File metadata and controls
94 lines (68 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "MicroMiddleware/ComponentManager.h"
#include "MicroMiddleware/ComponentBase.h"
namespace MicroMiddleware
{
ComponentManager* ComponentManager::componentManager_ = NULL;
ComponentManager::ComponentManager(string componentName)
: BaseLib::Thread(componentName)
, BaseLib::ObjectBase(componentName)
{
}
ComponentManager::~ComponentManager()
{
}
ComponentManager* ComponentManager::getOrCreate()
{
static Mutex staticMutex;
MutexLocker lock(&staticMutex);
if(ComponentManager::componentManager_ == NULL)
{
ComponentManager::componentManager_ = new ComponentManager();
ComponentManager::componentManager_->start();
}
return componentManager_;
}
void ComponentManager::run()
{
//IDEBUG() << "Component manager is up!" ;
while(true)
{
// do something!
sleep(1);
}
}
bool ComponentManager::AddComponent(ComponentBase *component)
{
MutexLocker lock(&mutex_);
if(mapIdComponent_.count(component->componentId() > 0))
{
IDEBUG() << "WARNING! Component " << component->componentId() << " already registered!";
return false;
}
mapIdComponent_[component->componentId()] = component;
//IDEBUG() << "Component " << component->componentId() << " " << component->componentName() << " started!" ;
return true;
}
bool ComponentManager::RemoveComponent(ComponentBase *component)
{
MutexLocker lock(&mutex_);
if(mapIdComponent_.count(component->componentId() <= 0))
{
IDEBUG() << "WARNING! Component " << component->componentId() << " already stopped!" ;
return false;
}
mapIdComponent_.erase(component->componentId());
IDEBUG() << "Component " << component->componentId() << " " << component->GetComponentName() << " stopped!" ;
return true;
}
ComponentBase* ComponentManager::GetComponent(ComponentId id)
{
MutexLocker lock(&mutex_);
if(mapIdComponent_.count((id) <= 0))
{
IDEBUG() << "WARNING! Component " << id << " not found!" ;
return NULL;
}
return mapIdComponent_[id];
}
}; // namespace MicroMiddleware