hce-node application  1.4.3
HCE Hierarchical Cluster Engine node application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ComponentManager.hpp
Go to the documentation of this file.
1 #ifndef COMPONENT_MANAGER_HPP
2 #define COMPONENT_MANAGER_HPP
3 
4 #include <Poco/SharedPtr.h>
5 #include <Poco/Condition.h>
6 #include <Poco/Mutex.h>
7 #include <Poco/Runnable.h>
8 #include <Poco/TaskManager.h>
9 #include <Poco/Thread.h>
10 #include <Poco/ThreadPool.h>
11 #include <queue>
12 #include <vector>
13 
14 #include "ComponentBase.hpp"
15 #include "TaskWaitObject.hpp"
16 
17 namespace HCE
18 {
19  namespace component
20  {
21  class ComponentManager : public Poco::Runnable
22  {
23  protected:
24  Poco::SharedPtr<ComponentBase> getFreeComponent();
25  protected:
26  bool exitFlag;
27  std::vector<Poco::SharedPtr<ComponentBase> > componentsList;
28  Poco::Thread ownThread;
29  Poco::SharedPtr<Poco::TaskManager> _taskManager;
30  Poco::FastMutex insertComponentMutex;
31  Poco::FastMutex incomeDataMutex;
32  Poco::Condition conditionVar;
33  std::queue<Poco::SharedPtr<TaskWaitObject> > taskQueue;
34  Poco::SharedPtr<Poco::ThreadPool> _threadPool;
35  public:
36  ComponentManager():exitFlag(false), _taskManager(nullptr) {}
37  void addComponent(Poco::SharedPtr<ComponentBase> componentPtr);
38  void setTaskManager(Poco::SharedPtr<Poco::TaskManager> taskManager);
39  void addTask(Poco::SharedPtr<TaskWaitObject> task);
40  void setThreadPool(Poco::SharedPtr<Poco::ThreadPool> threadPool) {_threadPool = threadPool;}
41  void clearTaskQueue();
42  void start();
43  void stop();
44  void join() {ownThread.join();}
45  bool isRunning() {return ownThread.isRunning();}
46  virtual void run();
47  virtual ~ComponentManager() {}
48  };
49  }
50 }
51 
52 
53 #endif