rad 8.2.0
Loading...
Searching...
No Matches
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>
25
26#include <boost/asio.hpp>
27
28#include <string>
29#include <memory>
30
31namespace rad {
32
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
129 void RegisterMalDds(const elt::mal::Mal::Properties& mal_properties);
130
143 [[deprecated("use RegisterMalDds(const elt::mal::Mal::Properties&)")]]
144 virtual void RegisterMalDds();
145
154 virtual void Run();
155
159 void StopEventLoop();
160
164 inline const std::string& GetName() const { return m_name; }
165
169 inline rad::DataContext& GetDataContext() { return m_data; }
170
174 inline boost::asio::io_context& GetEventLoop() { return m_ioc; }
175
179 inline std::shared_ptr<elt::mal::Mal> GetMalInstance() { return m_mal_zpb_instance; }
180
184 inline std::shared_ptr<elt::mal::Mal> GetMalDdsInstance() { return m_mal_dds_instance; }
185
198 void CreateReplier(const std::string& uri);
199
208 template<typename IF, typename IF_IMPL>
209 void RegisterService(const std::string& name, std::shared_ptr<IF_IMPL> if_impl);
210
211
212 Application(const Application&) = delete;
214
215 private:
216 std::string m_name;
217 log4cplus::Logger m_logger;
218 rad::DataContext& m_data;
219 std::shared_ptr<elt::mal::Mal> m_mal_zpb_instance;
220 std::shared_ptr<elt::mal::Mal> m_mal_dds_instance;
221 scxml4cpp::EventQueue m_external_events;
222 scxml4cpp::Context m_state_machine_ctx;
223
224 // Keep elt::mal::rr::Server open
225 std::unique_ptr<rad::cii::Replier> m_mal_replier;
226
227 // Destruct io_context before the elt::mal::rr::Server so that pending MAL
228 // requests/replies are cancelled before the MAL server.
229 // Otherwise the application may coredump.
230 boost::asio::io_context m_ioc;
231};
232
233template<typename IF, typename IF_IMPL>
234void Application::RegisterService(const std::string& name, std::shared_ptr<IF_IMPL> if_impl) {
235
236 if (m_mal_replier == nullptr) {
237 return;
238 }
239
240 m_mal_replier->RegisterService<IF>(name, if_impl);
241}
242
243
244} // namespace rad
245
246#endif // RAD_APPLICATION_HPP
Context header.
EventQueue header.
DataContext class header file.
void CreateReplier(const std::string &uri)
Definition application.cpp:266
void StopEventLoop()
Definition application.cpp:256
std::shared_ptr< elt::mal::Mal > GetMalDdsInstance()
Definition application.hpp:184
virtual void Run()
Definition application.cpp:248
virtual void Init(rad::ConfigurableActionMgr &action_mgr)
Definition application.cpp:85
void RegisterService(const std::string &name, std::shared_ptr< IF_IMPL > if_impl)
Definition application.hpp:234
Application(const std::string &name, rad::DataContext &data)
Definition application.cpp:16
virtual void RegisterMalDds()
Definition application.cpp:198
rad::DataContext & GetDataContext()
Definition application.hpp:169
std::shared_ptr< elt::mal::Mal > GetMalInstance()
Definition application.hpp:179
Application & operator=(const Application &)=delete
Disable copy constructor.
boost::asio::io_context & GetEventLoop()
Definition application.hpp:174
const std::string & GetName() const
Definition application.hpp:164
virtual bool Config(int argc, char *argv[])
Definition application.cpp:46
~Application() override
Definition application.cpp:41
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:67
Replier class header file.
SMAdapter class header file.