ModuleManager.hh
Go to the documentation of this file.
1 //
2 // Copyright (c) 2020 Fraunhofer Institute for Applied Information Technology (FIT)
3 // Network Research Group (NET)
4 // Schloss Birlinghoven, 53754 Sankt Augustin, GERMANY
5 // Contact: support@wiback.org
6 //
7 // This file is part of the SENF code tree.
8 // It is licensed under the 3-clause BSD License (aka New BSD License).
9 // See LICENSE.txt in the top level directory for details or visit
10 // https://opensource.org/licenses/BSD-3-Clause
11 //
12 
13 
17 #ifndef HH_SENF_PPI_ModuleManager_
18 #define HH_SENF_PPI_ModuleManager_ 1
19 
20 // Custom includes
21 #include <vector>
22 #include <deque>
23 #include "predecl.hh"
26 
27 //#include "ModuleManager.mpp"
28 //-/////////////////////////////////////////////////////////////////////////////////////////////////
29 
30 namespace senf {
31 namespace ppi {
32 
39  {
40  public:
41  //-////////////////////////////////////////////////////////////////////////
42  // Types
43 
45  {
46  Initializable();
47  virtual ~Initializable();
48  ModuleManager & moduleManager() const;
49  void enqueueInitializable();
50  void dequeueInitializable();
51  bool initializationScheduled() const;
52 
53  virtual void v_init() = 0;
54  };
55 
56  //-////////////////////////////////////////////////////////////////////////
58  //\{
59 
60  static ModuleManager & instance();
61 
62  // default default constructor
63  // default copy constructor
64  // default copy assignment
65  // default destructor
66 
67  // no conversion constructors
68 
69  //\}
70  //-////////////////////////////////////////////////////////////////////////
71 
72  void init();
73  void run();
74 
75  bool running() const;
76 
78 
79  private:
80  ModuleManager();
81  ~ModuleManager();
82 
83  void registerModule(module::Module & module);
84  void unregisterModule(module::Module & module);
85 
86  void registerInitializable(Initializable & i);
87  void unregisterInitializable(Initializable & i);
88  bool initializableRegistered(Initializable const & i) const;
89 
90  void dumpModules(std::ostream & os) const;
91 
92  typedef std::vector<module::Module *> ModuleRegistry;
93  typedef std::deque<Initializable *> InitQueue;
94 
95 #ifndef DOXYGEN
96  struct RunGuard;
97  friend struct RunGuard;
98 #endif
99 
100  ModuleRegistry moduleRegistry_;
101  bool running_;
102  bool alive_;
103 
104  InitQueue initQueue_;
105 
106  scheduler::EventHook initRunner_;
107 
108  console::ScopedDirectory<> consoleDir_;
109 
110  friend class module::Module;
111  friend struct Initializable;
112  };
113 
114 }}
115 
116 //-/////////////////////////////////////////////////////////////////////////////////////////////////
117 #include "ModuleManager.cci"
118 //#include "ModuleManager.ct"
119 //#include "ModuleManager.cti"
120 #endif
121 
122 
123 // Local Variables:
124 // mode: c++
125 // fill-column: 100
126 // comment-column: 40
127 // c-file-style: "senf"
128 // indent-tabs-mode: nil
129 // ispell-local-dictionary: "american"
130 // compile-command: "scons -u test"
131 // End:
void run()
Called by senf::ppi::run()
Module base-class.
Definition: Module.hh:169
static ModuleManager & instance()
predecl public header
ModuleManager & moduleManager() const
console::DirectoryNode & consoleDir() const
void init()
Called by senf::ppi::init()
bool running() const
true, if the network is running
Internal: Module management.