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