ifw  0.0.1-dev
 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/Dispatcher.hpp>
14 #include <rad/AnyEvent.hpp>
15 #include <rad/MsgHandler.hpp>
16 #include <rad/MsgReplier.hpp>
17 #include <rad/TopicSub.hpp>
18 
19 #include <scxml4cpp/Context.h>
20 #include <scxml4cpp/EventQueue.h>
21 #include <scxml4cpp/Executor.h>
22 #include <scxml4cpp/DOMSCXMLReader.h>
23 #include <scxml4cpp/StateMachine.h>
24 #include <scxml4cpp/Action.h>
25 #include <scxml4cpp/Activity.h>
26 #include <scxml4cpp/StatusListener.h>
27 #include <scxml4cpp/EventListener.h>
28 
29 #include <boost/asio.hpp>
30 #include <rad/SMEvent.hpp>
31 
32 #include <memory>
33 #include <list>
34 #include <vector>
35 
36 namespace rad {
37 
43 class SMAdapter
44 {
45 public:
46  SMAdapter(boost::asio::io_service& ios,
47  Dispatcher& dispatcher,
48  scxml4cpp::Context* context,
49  scxml4cpp::EventQueue& externalEvents);
50  virtual ~SMAdapter();
51 
52  void Load(const std::string& filename,
53  std::list<scxml4cpp::Action*>* actionList,
54  std::list<scxml4cpp::Activity*>* activityList);
55 
56  void RegisterEvents(std::vector<rad::EventInfo>& events);
57  void UnregisterEvents();
58  void EventCallback(const AnyEvent& e);
59 
60  void Start();
61  void Stop();
62 
63  void PostEvent(UniqueEvent&& e);
64 
65  void ProcessEvent();
67 
70 
71  void SetLogLevel(const std::string& level);
72 
73  SMAdapter(const SMAdapter& e) = delete;
74  SMAdapter& operator= (SMAdapter& e) = delete;
75 
76 private:
77  boost::asio::io_service& mIOS;
78  Dispatcher& mEventDispatcher;
79  std::list<Dispatcher::token_t> mEventHandlersTokens;
80  scxml4cpp::Context* mContext;
81  scxml4cpp::EventQueue& mExternalEvents;
82  scxml4cpp::Helper mHelper;
83  scxml4cpp::Executor* mExecutor;
85  std::string mModelName;
86  SMEvent mEvent;
87 
88  void Cleanup();
89 };
90 
91 
95 template<typename EventType>
96 std::function<void (const std::string&, const std::string&, const void*, size_t)> ReqProcessEvent(SMAdapter& sm)
97 {
98  RAD_LOG_TRACE();
99 
100  return [& /*sm*/] (const std::string& identity, const std::string& requestName, const void* pMsg, size_t msgSize) {
101  auto ev = ParseRequestAndCreateEvent<EventType>(identity, requestName, pMsg, msgSize);
102  sm.EventCallback(ev); // Process event
103  };
104 }
105 
109 template<typename EventType>
110 std::function<void (const std::string&, const void*, size_t)> TopicProcessEvent(SMAdapter& sm)
111 {
112  RAD_LOG_TRACE();
113 
114  return [& /*sm*/] (const std::string& topicName, const void* pMsg, size_t msgSize) {
115  auto ev = ParseTopicAndCreateEvent<EventType>(topicName, pMsg, msgSize);
116  sm.EventCallback(ev); // Process event
117  };
118 }
119 
120 
121 } // namespace rad
122 
123 #endif
void SetLogLevel(const std::string &level)
Definition: SMAdapter.cpp:272
SMAdapter & operator=(SMAdapter &e)=delete
SMAdapter(boost::asio::io_service &ios, Dispatcher &dispatcher, scxml4cpp::Context *context, scxml4cpp::EventQueue &externalEvents)
Definition: SMAdapter.cpp:31
void AddEventListener(scxml4cpp::EventListener *listener)
Definition: SMAdapter.cpp:259
virtual ~SMAdapter()
Definition: SMAdapter.cpp:46
Definition: Executor.h:67
void AddStatusListener(scxml4cpp::StatusListener *listener)
Definition: SMAdapter.cpp:246
void RegisterEvents(std::vector< rad::EventInfo > &events)
Definition: SMAdapter.cpp:124
std::function< void(const std::string &, const std::string &, const void *, size_t)> ReqProcessEvent(SMAdapter &sm)
Definition: SMAdapter.hpp:96
Definition: EventListener.h:39
void UnregisterEvents()
Definition: SMAdapter.cpp:142
Definition: StateMachine.h:44
void Stop()
Definition: SMAdapter.cpp:184
Definition: Helper.h:50
void Load(const std::string &filename, std::list< scxml4cpp::Action * > *actionList, std::list< scxml4cpp::Activity * > *activityList)
Definition: SMAdapter.cpp:84
Definition: Context.h:43
void EventCallback(const AnyEvent &e)
Definition: SMAdapter.cpp:157
Definition: Dispatcher.hpp:22
Definition: SMAdapter.hpp:43
std::unique_ptr< AnyEvent > UniqueEvent
Definition: AnyEvent.hpp:48
void Start()
Definition: SMAdapter.cpp:173
Definition: StatusListener.h:40
void PostEvent(UniqueEvent &&e)
Definition: SMAdapter.cpp:197
Definition: EventQueue.h:44
Definition: AnyEvent.hpp:55
#define RAD_LOG_TRACE()
Definition: Logger.hpp:319
Definition: Event.h:39
Definition: SMEvent.hpp:25
std::function< void(const std::string &, const void *, size_t)> TopicProcessEvent(SMAdapter &sm)
Definition: SMAdapter.hpp:110
void ProcessEvent()
Definition: SMAdapter.cpp:218