12 #include <events.rad.hpp>
16 #include <rad/exceptions.hpp>
17 #include <rad/getPayload.hpp>
18 #include <rad/mal/request.hpp>
19 #include <rad/smEvent.hpp>
21 #include <scxml4cpp/Event.h>
22 #include <scxml4cpp/Helper.h>
23 #include <scxml4cpp/State.h>
31 for (
auto* s : states) {
38 if (substate->getId() ==
"Off") {
41 State* state = s->getParent();
45 State* top = state->getParent();
49 if (top->getParent() !=
nullptr) {
53 status = state->getId() +
";" + substate->getId();
61 :
rad::ActionGroup(
"ActionsStd"),
64 m_signal(ios, sm,
rad::UniqueEvent(new Events::CtrlC())),
69 m_signal.Add(SIGTERM);
76 auto req = rad::GetLastEventPayloadNothrow<Events::Exit>(c);
78 LOG4CPLUS_ERROR(
GetLogger(),
"Exit event has no associated request!");
81 req->SetReplyValue(
"OK");
93 auto req = rad::GetLastEventPayloadNothrow<Events::GetState>(c);
95 LOG4CPLUS_ERROR(
GetLogger(),
"Status event has no associated request!");
98 req->SetReplyValue(m_sm.GetStatus());
104 auto req = rad::GetLastEventPayloadNothrow<Events::GetStatus>(c);
105 if (req ==
nullptr) {
106 LOG4CPLUS_ERROR(
GetLogger(),
"Status event has no associated request!");
109 auto status =
MakeStatusString(m_sm.GetActiveStates()).value_or(
"NotOperational;Undefined");
110 req->SetReplyValue(status);
117 auto req = rad::GetLastEventPayloadNothrow<Events::Stop>(c);
118 if (req ==
nullptr) {
119 LOG4CPLUS_ERROR(
GetLogger(),
"Stop event has no associated request!");
122 req->SetReplyValue(
"OK");
128 auto req = rad::GetLastEventPayloadNothrow<Events::Init>(c);
129 if (req ==
nullptr) {
130 LOG4CPLUS_ERROR(
GetLogger(),
"Init event has no associated request!");
133 req->SetReplyValue(
"OK");
139 auto req = rad::GetLastEventPayloadNothrow<Events::Enable>(c);
140 if (req ==
nullptr) {
141 LOG4CPLUS_ERROR(
GetLogger(),
"Enable event has no associated request!");
144 req->SetReplyValue(
"OK");
150 auto req = rad::GetLastEventPayloadNothrow<Events::Disable>(c);
151 if (req ==
nullptr) {
152 LOG4CPLUS_ERROR(
GetLogger(),
"Disable event has no associated request!");
155 req->SetReplyValue(
"OK");
161 auto req = rad::GetLastEventPayloadNothrow<Events::Reset>(c);
162 if (req ==
nullptr) {
163 LOG4CPLUS_ERROR(
GetLogger(),
"Reset event has no associated request!");
166 req->SetReplyValue(
"OK");
172 auto req = rad::GetLastEventPayloadNothrow<Events::SetLogLevel>(c);
173 if (req ==
nullptr) {
174 LOG4CPLUS_ERROR(
GetLogger(),
"SetLogLevel event has no associated request!");
178 auto req_params = req->GetRequestPayload();
179 std::string level = req_params->getLevel();
180 std::string logger_name = req_params->getLogger();
182 log4cplus::LogLevelManager& log_mgr = log4cplus::getLogLevelManager();
184 log4cplus::LogLevel ll = log_mgr.fromString(level);
185 if (ll == log4cplus::NOT_SET_LOG_LEVEL) {
186 req->SetReplyValue(
"ERR unknown logging level: " + level);
190 if (logger_name ==
"" || logger_name ==
LOGGER_NAME) {
193 log4cplus::Logger::getInstance(logger_name).setLogLevel(ll);
195 LOG4CPLUS_DEBUG(
GetLogger(),
"Log level set to " << level <<
" for logger " << logger_name);
197 req->SetReplyValue(
"OK");