rad  2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
smAdapter.hpp
Go to the documentation of this file.
1 
10 #ifndef RAD_SM_ADAPTER_HPP
11 #define RAD_SM_ADAPTER_HPP
12 
13 #include <rad/anyEvent.hpp>
14 #include <rad/msgHandler.hpp>
15 #include <rad/msgReplier.hpp>
16 #include <rad/smEvent.hpp>
17 #include <rad/topicSub.hpp>
18 
19 #include <scxml4cpp/Action.h>
20 #include <scxml4cpp/Activity.h>
21 #include <scxml4cpp/Context.h>
22 #include <scxml4cpp/DOMSCXMLReader.h>
23 #include <scxml4cpp/EventListener.h>
24 #include <scxml4cpp/EventQueue.h>
25 #include <scxml4cpp/Executor.h>
26 #include <scxml4cpp/StateMachine.h>
27 #include <scxml4cpp/StatusListener.h>
28 
29 #include <boost/asio.hpp>
30 
31 #include <list>
32 #include <memory>
33 #include <vector>
34 
35 namespace rad {
36 
42 class SMAdapter {
43  public:
44  SMAdapter(boost::asio::io_service& ios, scxml4cpp::Context* context,
45  scxml4cpp::EventQueue& external_events);
46  virtual ~SMAdapter();
47 
48  void Load(const std::string& filename, std::list<scxml4cpp::Action*>* action_list,
49  std::list<scxml4cpp::Activity*>* activity_list);
50  void Append(const std::string& filename, std::list<scxml4cpp::Action*>* action_list,
51  std::list<scxml4cpp::Activity*>* activity_list);
52 
53  void Start();
54  void Stop();
55 
56  void PostEvent(SharedEvent e);
57 
58  void ProcessEvent();
60  void ProcessEvent(const AnyEvent& e);
61 
64 
65  void SetLogLevel(const std::string& level);
66 
67  SMAdapter(const SMAdapter& e) = delete;
68  SMAdapter& operator=(SMAdapter& e) = delete;
69 
70  private:
71  boost::asio::io_service& m_ios;
72  scxml4cpp::Context* m_context;
73  scxml4cpp::EventQueue& m_external_events;
74  scxml4cpp::Helper m_helper;
75  scxml4cpp::Executor* m_executor;
77  std::string m_model_name;
78  SMEvent m_event;
79 
80  void Cleanup();
81 };
82 
86 template <typename EventType>
87 std::function<void(const std::string&, const std::string&, const void*, size_t)> ReqProcessEvent(
88  SMAdapter& sm) {
89  return [&/*sm*/](const std::string& identity, const std::string& request_name, const void* msg,
90  size_t msg_size) {
91  auto ev = ParseRequestAndCreateEvent<EventType>(identity, request_name, msg, msg_size);
92  sm.ProcessEvent(ev); // Process event
93  };
94 }
95 
99 template <typename EventType>
100 std::function<void(const std::string&, const void*, size_t)> TopicProcessEvent(SMAdapter& sm) {
101  return [&/*sm*/](const std::string& topic_name, const void* msg, size_t msg_size) {
102  auto ev = ParseTopicAndCreateEvent<EventType>(topic_name, msg, msg_size);
103  sm.ProcessEvent(ev); // Process event
104  };
105 }
106 
107 } // namespace rad
108 
109 #endif // RAD_SM_ADAPTER_HPP
void SetLogLevel(const std::string &level)
Definition: smAdapter.cpp:261
void Load(const std::string &filename, std::list< scxml4cpp::Action * > *action_list, std::list< scxml4cpp::Activity * > *activity_list)
Definition: smAdapter.cpp:75
SMAdapter & operator=(SMAdapter &e)=delete
void AddEventListener(scxml4cpp::EventListener *listener)
Definition: smAdapter.cpp:249
SMAdapter(boost::asio::io_service &ios, scxml4cpp::Context *context, scxml4cpp::EventQueue &external_events)
Definition: smAdapter.cpp:32
virtual ~SMAdapter()
Definition: smAdapter.cpp:42
void Append(const std::string &filename, std::list< scxml4cpp::Action * > *action_list, std::list< scxml4cpp::Activity * > *activity_list)
Definition: smAdapter.cpp:110
Definition: Executor.h:64
void PostEvent(SharedEvent e)
Definition: smAdapter.cpp:181
void AddStatusListener(scxml4cpp::StatusListener *listener)
Definition: smAdapter.cpp:237
std::function< void(const std::string &, const std::string &, const void *, size_t)> ReqProcessEvent(SMAdapter &sm)
Definition: smAdapter.hpp:87
Definition: EventListener.h:39
Definition: StateMachine.h:44
void Stop()
Definition: smAdapter.cpp:167
Definition: Helper.h:50
Definition: Context.h:43
Definition: smAdapter.hpp:42
void Start()
Definition: smAdapter.cpp:157
Definition: StatusListener.h:40
Definition: EventQueue.h:43
Definition: anyEvent.hpp:52
std::shared_ptr< const AnyEvent > SharedEvent
Definition: anyEvent.hpp:44
Definition: Event.h:38
Definition: smEvent.hpp:22
std::function< void(const std::string &, const void *, size_t)> TopicProcessEvent(SMAdapter &sm)
Definition: smAdapter.hpp:100
void ProcessEvent()
Definition: smAdapter.cpp:194