RTC Toolkit 6.0.0
Loading...
Searching...
No Matches
stdCmdsImpl.hpp
Go to the documentation of this file.
1
11
12#ifndef RTCTK_COMPONENTFRAMEWORK_STDCMDSIMPL_HPP
13#define RTCTK_COMPONENTFRAMEWORK_STDCMDSIMPL_HPP
14
15#include <Stdif.hpp>
17#include <rtctk/componentFramework/events.rad.hpp>
21
22#include <mal/Cii.hpp>
23
24#include <memory>
25#include <string>
26
28
34class StdCmdsImpl : public stdif::AsyncStdCmds {
35public:
36 static void Register(CommandReplier& replier, StateMachineEngine& engine) {
37 std::shared_ptr<elt::mal::rr::RrEntity> rr_service =
38 std::make_shared<StdCmdsImpl>(engine, replier.GetMal());
39 replier.RegisterService<stdif::AsyncStdCmds>("StdCmds", rr_service);
40 }
41
42 explicit StdCmdsImpl(StateMachineEngine& engine, std::shared_ptr<elt::mal::Mal> mal)
43 : m_logger(GetLogger("rtctk")), m_engine(engine), m_mal(std::move(mal)) {
44 }
45
46 ::elt::mal::future<std::string> Init() override {
47 LOG4CPLUS_TRACE(m_logger, "Received command 'Init'");
48 return InjectReqRepEvent<events::Init>(m_engine);
49 }
50
51 ::elt::mal::future<std::string> Stop() override {
52 LOG4CPLUS_TRACE(m_logger, "Received command 'Stop'");
53 return InjectReqRepEvent<events::Stop>(m_engine);
54 }
55
56 ::elt::mal::future<std::string> Reset() override {
57 LOG4CPLUS_TRACE(m_logger, "Received command 'Reset'");
58 return InjectReqRepEvent<events::Reset>(m_engine);
59 }
60
61 ::elt::mal::future<std::string> Enable() override {
62 LOG4CPLUS_TRACE(m_logger, "Received command 'Enable'");
63 return InjectReqRepEvent<events::Enable>(m_engine);
64 }
65
66 ::elt::mal::future<std::string> Disable() override {
67 LOG4CPLUS_TRACE(m_logger, "Received command 'Disable'");
69 }
70
71 ::elt::mal::future<std::string> GetState() override {
72 LOG4CPLUS_TRACE(m_logger, "Received command 'GetState'");
74 }
75
76 ::elt::mal::future<std::string> GetStatus() override {
77 LOG4CPLUS_TRACE(m_logger, "Received command 'GetStatus'");
79 }
80
81 ::elt::mal::future<std::string> GetVersion() override {
82 LOG4CPLUS_TRACE(m_logger, "Received command 'GetVersion'");
84 }
85
86 ::elt::mal::future<std::string> Exit() override {
87 LOG4CPLUS_TRACE(m_logger, "Received command 'Exit'");
88 return InjectReqRepEvent<events::Exit>(m_engine);
89 }
90
91 ::elt::mal::future<std::string>
92 SetLogLevel(const std::shared_ptr<stdif::LogInfo>& info) override {
93 LOG4CPLUS_TRACE(m_logger,
94 "Received command 'SetLogLevel' with logger '" + info->getLogger() +
95 "' and level '" + info->getLevel() + "'");
96 auto ev = std::make_shared<events::SetLogLevel>(info->clone());
97 auto f = ev->GetPayload().GetReplyFuture();
98 m_engine.PostEvent(ev);
99 return f;
100 }
101
102 ::elt::mal::future<std::vector<std::shared_ptr<stdif::LogInfo>>>
103 GetLogLevel(const std::string& req_loggers) override {
104 LOG4CPLUS_TRACE(m_logger,
105 "Received command 'GetLogLevel' for logger '" + req_loggers + "'");
106 boost::promise<std::vector<std::shared_ptr<stdif::LogInfo>>> promise;
107
108 std::vector<std::shared_ptr<stdif::LogInfo>> loggers{};
109
110 for (const log4cplus::Logger& logger : log4cplus::Logger::getCurrentLoggers()) {
111 std::shared_ptr<stdif::LogInfo> log = m_mal->createDataEntity<stdif::LogInfo>();
112 log->setLogger(logger.getName());
113 log->setLevel(log4cplus::getLogLevelManager().toString(logger.getLogLevel()));
114 if (req_loggers.empty()) {
115 // If the parameters is an empty string we return all loggers
116 loggers.push_back(std::move(log));
117 } else if (logger.getName() == req_loggers) {
118 // Otherwise, we only return the logger that matches
119 loggers.push_back(std::move(log));
120 break;
121 }
122 } // for
123
124 std::string log_msg = "[";
125 bool is_first = true;
126 for (const std::shared_ptr<stdif::LogInfo>& l : loggers) {
127 if (!is_first) {
128 log_msg += ", ";
129 }
130 log_msg += "logger: ";
131 log_msg += l->getLogger();
132 log_msg += " level: ";
133 log_msg += l->getLevel();
134 is_first = false;
135 }
136 log_msg += "]";
137
138 LOG4CPLUS_DEBUG(m_logger, "Loggers: " + log_msg);
139
140 return boost::make_ready_future<std::vector<std::shared_ptr<stdif::LogInfo>>>(loggers);
141 } // GetLogLevel
142
143private:
144 log4cplus::Logger& m_logger;
145 StateMachineEngine& m_engine;
146 std::shared_ptr<elt::mal::Mal> m_mal;
147};
148
149} // namespace rtctk::componentFramework
150
151#endif // RTCTK_COMPONENTFRAMEWORK_STDCMDSIMPL_HPP
Class that handles reception of commands using MAL.
Definition commandReplier.hpp:29
void RegisterService(const std::string &name, std::shared_ptr< elt::mal::rr::RrEntity > &service)
Definition commandReplier.hpp:36
std::shared_ptr< elt::mal::Mal > GetMal()
Definition commandReplier.hpp:45
Definition stateMachineEngine.hpp:34
::elt::mal::future< std::string > Stop() override
Definition stdCmdsImpl.hpp:51
static void Register(CommandReplier &replier, StateMachineEngine &engine)
Definition stdCmdsImpl.hpp:36
StdCmdsImpl(StateMachineEngine &engine, std::shared_ptr< elt::mal::Mal > mal)
Definition stdCmdsImpl.hpp:42
::elt::mal::future< std::string > Reset() override
Definition stdCmdsImpl.hpp:56
::elt::mal::future< std::vector< std::shared_ptr< stdif::LogInfo > > > GetLogLevel(const std::string &req_loggers) override
Definition stdCmdsImpl.hpp:103
::elt::mal::future< std::string > Init() override
Definition stdCmdsImpl.hpp:46
::elt::mal::future< std::string > Exit() override
Definition stdCmdsImpl.hpp:86
::elt::mal::future< std::string > GetStatus() override
Definition stdCmdsImpl.hpp:76
::elt::mal::future< std::string > GetState() override
Definition stdCmdsImpl.hpp:71
::elt::mal::future< std::string > SetLogLevel(const std::shared_ptr< stdif::LogInfo > &info) override
Definition stdCmdsImpl.hpp:92
::elt::mal::future< std::string > Disable() override
Definition stdCmdsImpl.hpp:66
::elt::mal::future< std::string > GetVersion() override
Definition stdCmdsImpl.hpp:81
::elt::mal::future< std::string > Enable() override
Definition stdCmdsImpl.hpp:61
Receive commands via MAL.
log4cplus::Logger & GetLogger(const std::string &name="app")
Get handle to a specific logger.
Definition logger.cpp:191
Logging Support Library based on log4cplus.
Provides core functionality of an RTC Component.
Definition commandReplier.cpp:21
elt::mal::future< std::string > InjectReqRepEvent(StateMachineEngine &engine)
Definition malEventInjector.hpp:22
Definition ddsSub.hpp:155
Wrapper around the SCXML State Machine Engine.