rad  5.1.0
application.hpp
Go to the documentation of this file.
1 
9 #ifndef RAD_APPLICATION_HPP
10 #define RAD_APPLICATION_HPP
11 
12 //#include <lsv/app/events.rad.hpp>
13 //#include <lsv/app/stdCmds.rad.hpp>
14 //#include <lsv/app/stdCmdsImpl.hpp>
15 //#include <lsv/app/lsvCmdsImpl.hpp>
16 
17 #include <rad/smAdapter.hpp>
18 #include <rad/dataContext.hpp>
20 #include <rad/mal/replier.hpp>
21 #include <rad/mal/utils.hpp>
22 
23 #include <scxml4cpp/Context.h>
24 #include <scxml4cpp/EventQueue.h>
25 
26 #include <boost/asio.hpp>
27 
28 #include <string>
29 #include <memory>
30 
31 namespace rad {
32 
48 class Application : public rad::SMAdapter {
49  public:
56  Application(const std::string& name, rad::DataContext& data);
57 
61  ~Application() override;
62 
74  virtual bool Config(int argc, char* argv[]);
75 
91  virtual void Init(rad::ConfigurableActionMgr& action_mgr);
92 
110  virtual bool Init(int argc, char* argv[], rad::ConfigurableActionMgr& action_mgr);
111 
120  virtual void Run();
121 
125  void StopEventLoop();
126 
130  inline boost::asio::io_context& GetEventLoop() { return m_ioc; }
131 
135  inline std::shared_ptr<elt::mal::Mal> GetMalInstance() { return m_mal_instance; }
136 
149  void CreateReplier(const std::string& uri);
150 
159  template<typename IF, typename IF_IMPL>
160  void RegisterService(const std::string& name, std::shared_ptr<IF_IMPL> if_impl);
161 
162 
163  Application(const Application&) = delete;
164  Application& operator=(const Application&) = delete;
165 
166  private:
167  std::string m_name;
168  log4cplus::Logger m_logger;
169  rad::DataContext& m_data;
170  std::shared_ptr<elt::mal::Mal> m_mal_instance;
171  boost::asio::io_context m_ioc;
172  scxml4cpp::EventQueue m_external_events;
173  scxml4cpp::Context m_state_machine_ctx;
174  std::unique_ptr<rad::cii::Replier> m_mal_replier;
175 };
176 
177 template<typename IF, typename IF_IMPL>
178 void Application::RegisterService(const std::string& name, std::shared_ptr<IF_IMPL> if_impl) {
179 
180  if (m_mal_replier == nullptr) {
181  return;
182  }
183 
184  m_mal_replier->RegisterService<IF>(name, if_impl);
185 }
186 
187 
188 } // namespace rad
189 
190 #endif // RAD_APPLICATION_HPP
Context header.
EventQueue header.
DataContext class header file.
Definition: application.hpp:48
void CreateReplier(const std::string &uri)
Definition: application.cpp:185
boost::asio::io_context & GetEventLoop()
Definition: application.hpp:130
void StopEventLoop()
Definition: application.cpp:175
virtual void Run()
Definition: application.cpp:167
virtual void Init(rad::ConfigurableActionMgr &action_mgr)
Definition: application.cpp:70
void RegisterService(const std::string &name, std::shared_ptr< IF_IMPL > if_impl)
Definition: application.hpp:178
Application(const std::string &name, rad::DataContext &data)
Definition: application.cpp:16
Application & operator=(const Application &)=delete
Disable copy constructor.
virtual bool Config(int argc, char *argv[])
Definition: application.cpp:39
~Application() override
Definition: application.cpp:34
std::shared_ptr< elt::mal::Mal > GetMalInstance()
Definition: application.hpp:135
Application(const Application &)=delete
Definition: configurableActionMgr.hpp:30
Definition: dataContext.hpp:22
Definition: smAdapter.hpp:60
Definition: Context.h:58
Definition: EventQueue.h:55
ConfigurableActionMgr class header file.
Utils class header file.
Definition: actionsApp.cpp:20
name
Definition: wscript:8
Replier class header file.
SMAdapter class header file.