Fawkes API  Fawkes Development Version
protobuf_comm::MessageRegister Class Reference

Register to map msg type numbers to Protobuf messages. More...

#include <>>

Inheritance diagram for protobuf_comm::MessageRegister:

Public Types

typedef std::multimap< std::string, std::string > LoadFailMap
 Mapping from message type to load error message. More...
 

Public Member Functions

 MessageRegister ()
 Constructor. More...
 
 MessageRegister (std::vector< std::string > &proto_path)
 Constructor. More...
 
 ~MessageRegister ()
 Destructor. More...
 
void add_message_type (std::string msg_type)
 Add a message type from generated pool. More...
 
template<class MT >
std::enable_if< std::is_base_of< google::protobuf::Message, MT >::value, void >::type add_message_type (uint16_t component_id, uint16_t msg_type)
 Add a new message type. More...
 
template<class MT >
std::enable_if< std::is_base_of< google::protobuf::Message, MT >::value, void >::type add_message_type ()
 Add a new message type. More...
 
void remove_message_type (uint16_t component_id, uint16_t msg_type)
 Remove the given message type. More...
 
std::shared_ptr< google::protobuf::Message > new_message_for (uint16_t component_id, uint16_t msg_type)
 Create a new message instance. More...
 
std::shared_ptr< google::protobuf::Message > new_message_for (std::string &full_name)
 Create a new message instance. More...
 
void serialize (uint16_t component_id, uint16_t msg_type, google::protobuf::Message &msg, frame_header_t &frame_header, message_header_t &message_header, std::string &data)
 Serialize a message. More...
 
std::shared_ptr< google::protobuf::Message > deserialize (frame_header_t &frame_header, message_header_t &message_header, void *data)
 Deserialize message. More...
 
const LoadFailMapload_failures () const
 Get failure messages from loading. More...
 

Detailed Description

Register to map msg type numbers to Protobuf messages.

The register is used to automatically parse incoming messages to the appropriate type. In your application, you need to register any message you want to read. All unknown messages are silently dropped.

Author
Tim Niemueller

Definition at line 69 of file message_register.h.

Member Typedef Documentation

◆ LoadFailMap

typedef std::multimap<std::string, std::string> protobuf_comm::MessageRegister::LoadFailMap

Mapping from message type to load error message.

Definition at line 149 of file message_register.h.

Constructor & Destructor Documentation

◆ MessageRegister() [1/2]

protobuf_comm::MessageRegister::MessageRegister ( )

Constructor.

Definition at line 61 of file message_register.cpp.

◆ MessageRegister() [2/2]

protobuf_comm::MessageRegister::MessageRegister ( std::vector< std::string > &  proto_path)

Constructor.

Parameters
proto_pathfile paths to search for proto files. All message types within these files will automatically be registered and available for dynamic message creation.

Definition at line 74 of file message_register.cpp.

References add_message_type().

◆ ~MessageRegister()

protobuf_comm::MessageRegister::~MessageRegister ( )

Destructor.

Definition at line 112 of file message_register.cpp.

Member Function Documentation

◆ add_message_type() [1/3]

void protobuf_comm::MessageRegister::add_message_type ( std::string  msg_type)

Add a message type from generated pool.

This will check all message libraries for a type of the given name and if found registers it.

Parameters
msg_typethe full name of the message type to add, i.e. including a package name if the message type has one. The message must have been registered with either the generated messages pool or with the pool associated with the proto paths passed to the constructor.

Definition at line 156 of file message_register.cpp.

Referenced by protobuf_clips::ClipsProtobufCommunicator::disable_server(), and oprs_protobuf::OpenPRSProtobuf::oprs_pb_register_type().

◆ add_message_type() [2/3]

template<class MT >
std::enable_if<std::is_base_of<google::protobuf::Message, MT>::value, void>::type protobuf_comm::MessageRegister::add_message_type ( uint16_t  component_id,
uint16_t  msg_type 
)
inline

Add a new message type.

The template parameter must be a sub-class of google::protobuf::Message. An instance is spawned and kept internally to spawn more on incoming messages.

Parameters
component_idID of component this message type belongs to
msg_typemessage type

Definition at line 86 of file message_register.h.

◆ add_message_type() [3/3]

template<class MT >
std::enable_if<std::is_base_of<google::protobuf::Message, MT>::value, void>::type protobuf_comm::MessageRegister::add_message_type ( )
inline

Add a new message type.

The template parameter must be a sub-class of google::protobuf::Message. An instance is spawned and kept internally to spawn more on incoming messages.

Definition at line 110 of file message_register.h.

Referenced by MessageRegister().

◆ deserialize()

std::shared_ptr< google::protobuf::Message > protobuf_comm::MessageRegister::deserialize ( frame_header_t frame_header,
message_header_t message_header,
void *  data 
)

Deserialize message.

Parameters
frame_headerincoming message's frame header
message_headerincoming message's message header
dataincoming message's data buffer
Returns
new instance of a protobuf message type that has been registered for the given type.
Exceptions
std::runtime_errorthrown if anything goes wrong when deserializing the message, e.g. if no protobuf message has been registered for the given component ID and message type.

Definition at line 326 of file message_register.cpp.

References protobuf_comm::message_header_t::component_id, protobuf_comm::message_header_t::msg_type, new_message_for(), and protobuf_comm::frame_header_t::payload_size.

Referenced by protobuf_comm::ProtobufStreamClient::disconnect(), and protobuf_comm::ProtobufBroadcastPeer::set_filter_self().

◆ load_failures()

const LoadFailMap& protobuf_comm::MessageRegister::load_failures ( ) const
inline

Get failure messages from loading.

If the proto path constructor is used this function returns a list of loading errors after construction.

Returns
map of loading failures

Definition at line 156 of file message_register.h.

◆ new_message_for() [1/2]

std::shared_ptr< google::protobuf::Message > protobuf_comm::MessageRegister::new_message_for ( uint16_t  component_id,
uint16_t  msg_type 
)

Create a new message instance.

Parameters
component_idID of component this message type belongs to
msg_typemessage type
Returns
new instance of a protobuf message that has been registered for the given message type.

Definition at line 229 of file message_register.cpp.

Referenced by deserialize(), protobuf_clips::ClipsProtobufCommunicator::disable_server(), and oprs_protobuf::OpenPRSProtobuf::oprs_create_msg().

◆ new_message_for() [2/2]

std::shared_ptr< google::protobuf::Message > protobuf_comm::MessageRegister::new_message_for ( std::string &  full_name)

Create a new message instance.

Parameters
full_namefull message type name, i.e. the message type name possibly with a package name prefix.
Returns
new instance of a protobuf message that has been registered for the given message type.

Definition at line 257 of file message_register.cpp.

◆ remove_message_type()

void protobuf_comm::MessageRegister::remove_message_type ( uint16_t  component_id,
uint16_t  msg_type 
)

Remove the given message type.

Parameters
component_idID of component this message type belongs to
msg_typemessage type

Definition at line 186 of file message_register.cpp.

◆ serialize()

void protobuf_comm::MessageRegister::serialize ( uint16_t  component_id,
uint16_t  msg_type,
google::protobuf::Message &  msg,
frame_header_t frame_header,
message_header_t message_header,
std::string &  data 
)

Serialize a message.

Parameters
component_idID of component this message type belongs to
msg_typemessage type
msgmessage to seialize
frame_headerupon return, the frame header is filled out according to the given information and message.
message_headerupon return, the frame header is filled out according to the given information and message.
dataupon return, contains the serialized message

Definition at line 285 of file message_register.cpp.

References protobuf_comm::message_header_t::component_id, protobuf_comm::message_header_t::msg_type, and protobuf_comm::frame_header_t::payload_size.

Referenced by protobuf_comm::ProtobufStreamClient::send(), and protobuf_comm::ProtobufBroadcastPeer::send().


The documentation for this class was generated from the following files: