rad  2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
topicHandler.hpp
Go to the documentation of this file.
1 
9 #ifndef RAD_TOPIC_HANDLER_HPP
10 #define RAD_TOPIC_HANDLER_HPP
11 
12 #include <rad/exceptions.hpp>
13 
14 #include <memory>
15 #include <string>
16 #include <unordered_map>
17 
18 namespace rad {
19 
23 class TopicHandler {
24  public:
25  virtual ~TopicHandler() {}
33  virtual void Handle(const std::string& topic_type_id, const void* data, size_t data_size) = 0;
34 };
35 
43 template <typename EventType>
44 EventType ParseTopicAndCreateEvent(const std::string& topic_name, const void* msg,
45  size_t msg_size) {
46  typename EventType::payload_t topic_payload;
47  if (topic_payload.ParseFromArray(msg, msg_size) == false) {
48  throw rad::Exception("Error parsing <" + topic_name + "> payload.");
49  }
50  return EventType(topic_payload);
51 }
52 
53 } // namespace rad
54 
55 #endif /* #ifndef RAD_TOPIC_HANDLER_HPP */
virtual void Handle(const std::string &topic_type_id, const void *data, size_t data_size)=0
Definition: exceptions.hpp:45
virtual ~TopicHandler()
Definition: topicHandler.hpp:25
EventType ParseTopicAndCreateEvent(const std::string &topic_name, const void *msg, size_t msg_size)
Definition: topicHandler.hpp:44
Definition: topicHandler.hpp:23