ANNA Suite  2020b
Multipurpose development suite for Telco applications
Application.hpp
Go to the documentation of this file.
1 // ANNA - Anna is Not Nothingness Anymore //
2 // //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
4 // //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7 
8 
9 #ifndef anna_app_Application_hpp
10 #define anna_app_Application_hpp
11 
12 #include <vector>
13 
15 
16 namespace anna {
17 
18 namespace xml {
19 class Node;
20 }
21 
22 namespace app {
23 
24 class Component;
25 struct functions;
26 
35 class Application {
36 public:
37  typedef std::vector <Component*>::iterator iterator;
38  typedef std::vector <Component*>::const_iterator const_iterator;
39  typedef std::vector <pid_t> pid_container;
40  typedef pid_container::iterator pid_iterator;
41  typedef pid_container::const_iterator const_pid_iterator;
42 
52  Application(const char* shortName, const char* title, const char* version, const char* date = NULL, const char* time = NULL);
53 
57  virtual ~Application() { a_components.clear(); }
58 
59  // Getters
64  const char* getShortName() const { return a_shortName; }
65 
70  const std::string& getVersion() const { return a_version; }
71 
76  const std::string& getTitle() const { return a_title; }
77 
82  pid_t getPid() const { return a_pid; }
83 
88  void activateGeneralPublicLicense() { a_enableGPL = true; }
89 
102  Application& clone() noexcept(false);
103 
109  Component* find(const char* className) ;
110 
115  void start() noexcept(false);
116 
121  const_iterator begin() const { return a_components.begin(); }
122 
127  iterator begin() { return a_components.begin(); }
128 
133  const_iterator end() const { return a_components.end(); }
134 
139  iterator end() { return a_components.end(); }
140 
145  void writeContext(const std::string& file) noexcept(false);
146 
154  virtual void initialize() noexcept(false) {;}
155 
161  virtual bool supportCommunication() const { return false; }
162 
172  virtual void eventAbnormalTermination(const char* className) { ; }
173 
179  virtual xml::Node* asXML(xml::Node* parent) const ;
180 
186  static const Component* component(const_iterator& ii) { return *ii; }
187 
193  static Component* component(iterator& ii) { return *ii; }
194 
195 protected:
197 
201  virtual void run() noexcept(false) = 0;
202 
206  virtual void signalUSR1() noexcept(false);
207 
211  virtual void signalUSR2() noexcept(false);
212 
216  virtual void signalTerminate() noexcept(false) {;}
217 
223  virtual void do_cloneParent() noexcept(false) {;}
224 
230  virtual void do_cloneChild() noexcept(false) {;}
231 
236  pid_iterator pid_begin() { return a_pids.begin(); }
237 
242  pid_iterator pid_end() { return a_pids.end(); }
243 
248  int pid_size() const { return a_pids.size(); }
249 
254  const_pid_iterator pid_begin() const { return a_pids.begin(); }
255 
260  const_pid_iterator pid_end() const { return a_pids.end(); }
261 
267  static pid_t pid(pid_iterator& ii) { return *ii; }
268 
274  static pid_t pid(const_pid_iterator& ii) { return *ii; }
275 
276 private:
277  const std::string a_title;
278  std::vector <Component*> a_components;
279  pid_t a_pid;
280  const char* a_shortName;
281  bool a_running;
282  std::string a_version;
283  bool a_enableGPL;
284  pid_container a_pids;
285 
286  void attach(Component*) noexcept(false);
287  void detach(Component*) noexcept(false);
288 
289  void startComponents() noexcept(false);
290  void stopComponents() noexcept(false);
291  void sendSignalToChilds(const int signal) ;
292 
293  void signalUSR(int) noexcept(false);
294  static void handlerSignalUSR(int) ;
295  static void handlerSignalTerminate(int) ;
296  static void handlerChildTerminate(int sig) ;
297 
298  friend class Component; // Para poder acceder a los metodo attach y detach
299  friend struct functions;
300 };
301 
302 }
303 }
304 
305 #endif
306 
iterator end()
Definition: Application.hpp:139
Definition: Application.hpp:35
pid_container::iterator pid_iterator
Definition: Application.hpp:40
virtual ~Application()
Definition: Application.hpp:57
pid_container::const_iterator const_pid_iterator
Definition: Application.hpp:41
void activateGeneralPublicLicense()
Definition: Application.hpp:88
const std::string & getTitle() const
Definition: Application.hpp:76
iterator begin()
Definition: Application.hpp:127
static pid_t pid(pid_iterator &ii)
Definition: Application.hpp:267
Definition: functions.hpp:16
pid_iterator pid_end()
Definition: Application.hpp:242
Definition: Node.hpp:56
int pid_size() const
Definition: Application.hpp:248
const_pid_iterator pid_begin() const
Definition: Application.hpp:254
virtual void do_cloneParent() noexcept(false)
Definition: Application.hpp:223
pid_t getPid() const
Definition: Application.hpp:82
static Component * component(iterator &ii)
Definition: Application.hpp:193
std::vector< pid_t > pid_container
Definition: Application.hpp:39
virtual void do_cloneChild() noexcept(false)
Definition: Application.hpp:230
Definition: Component.hpp:39
std::vector< Component * >::iterator iterator
Definition: Application.hpp:37
virtual void initialize() noexcept(false)
Definition: Application.hpp:154
virtual bool supportCommunication() const
Definition: Application.hpp:161
const std::string & getVersion() const
Definition: Application.hpp:70
static pid_t pid(const_pid_iterator &ii)
Definition: Application.hpp:274
pid_iterator pid_begin()
Definition: Application.hpp:236
static Application * st_application
Definition: Application.hpp:196
virtual void eventAbnormalTermination(const char *className)
Definition: Application.hpp:172
Definition: app.hpp:12
Definition: Component.hpp:44
Definition: functions.hpp:25
const_pid_iterator pid_end() const
Definition: Application.hpp:260
const_iterator begin() const
Definition: Application.hpp:121
std::vector< Component * >::const_iterator const_iterator
Definition: Application.hpp:38
const char * getShortName() const
Definition: Application.hpp:64
static const Component * component(const_iterator &ii)
Definition: Application.hpp:186
const_iterator end() const
Definition: Application.hpp:133