Fawkes API
Fawkes Development Version
|
Representation of a message that is sent over the network. More...
#include <netcomm/fawkes/message.h>
Public Member Functions | |
FawkesNetworkMessage (unsigned int clid, fawkes_message_t &msg) | |
Constructor to set message and client ID. More... | |
FawkesNetworkMessage (fawkes_message_t &msg) | |
Constructor that only sets message. More... | |
FawkesNetworkMessage (unsigned int clid, unsigned short int cid, unsigned short int msg_id, void *payload, size_t payload_size) | |
Constructor to set single fields and client ID. More... | |
FawkesNetworkMessage (unsigned int clid, unsigned short int cid, unsigned short int msg_id) | |
Constructor to set single fields and client ID without payload. More... | |
FawkesNetworkMessage (unsigned short int cid, unsigned short int msg_id, void *payload, size_t payload_size) | |
Constructor to set single fields. More... | |
FawkesNetworkMessage (unsigned int clid, unsigned short int cid, unsigned short int msg_id, FawkesNetworkMessageContent *content) | |
Constructor to set single fields and client ID. More... | |
FawkesNetworkMessage (unsigned short int cid, unsigned short int msg_id, FawkesNetworkMessageContent *content) | |
Constructor to set single fields. More... | |
FawkesNetworkMessage (unsigned short int cid, unsigned short int msg_id, size_t payload_size) | |
Constructor to set single fields and allocate memory. More... | |
FawkesNetworkMessage (unsigned short int cid, unsigned short int msg_id) | |
Constructor to set single fields without payload. More... | |
FawkesNetworkMessage () | |
Constructor. More... | |
virtual | ~FawkesNetworkMessage () |
Destructor. More... | |
unsigned int | clid () const |
Get client ID. More... | |
unsigned short int | cid () const |
Get component ID. More... | |
unsigned short int | msgid () const |
Get message type ID. More... | |
size_t | payload_size () const |
Get payload size. More... | |
void * | payload () const |
Get payload buffer. More... | |
const fawkes_message_t & | fmsg () const |
Get message reference. More... | |
template<typename MT > | |
MT * | msg () const |
Get correctly casted payload. More... | |
template<typename MT > | |
MT * | msgge () const |
Get correctly casted payload. More... | |
template<typename MT > | |
MT * | msgc () const |
Get correctly parsed output. More... | |
void | set_client_id (unsigned int clid) |
Set client ID. More... | |
void | set_component_id (unsigned short int cid) |
Set component ID. More... | |
void | set_message_id (unsigned short int msg_id) |
Set message type ID. More... | |
void | set_payload (void *payload, size_t payload_size) |
Set payload. More... | |
void | set (fawkes_message_t &msg) |
Set from message. More... | |
void | set_content (FawkesNetworkMessageContent *content) |
Set complex message content. More... | |
void | pack () |
Pack data for sending. More... | |
![]() | |
RefCount () | |
Constructor. More... | |
virtual | ~RefCount () |
Destructor. More... | |
void | ref () |
Increment reference count. More... | |
void | unref () |
Decrement reference count and conditionally delete this instance. More... | |
unsigned int | refcount () |
Get reference count for this instance. More... | |
Representation of a message that is sent over the network.
For the basic format of a message see fawkes_message_t. This class provides access to all of the fields in a convenient manner. Additionally it can handle the client ID, which is either the sender or the recipient of a message (depending if it's in an inbound or outbound queue).
Note that the message takes over ownership of the payload. This means that it is internally held and freed (using free()) if the message is deleted (if the reference count reaches zero). Because of this you can NOT supply a local variable. The following code is illegal:
Rather you have to use the following code:
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | unsigned int | clid, |
fawkes_message_t & | msg | ||
) |
Constructor to set message and client ID.
clid | client ID |
msg | reference to message, deep-copied into local message. |
Definition at line 98 of file message.cpp.
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | fawkes_message_t & | msg | ) |
Constructor that only sets message.
The client ID is zero.
msg | reference to message, deep-copied into local message. |
Definition at line 109 of file message.cpp.
References msg().
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | unsigned int | clid, |
unsigned short int | cid, | ||
unsigned short int | msg_id, | ||
void * | payload, | ||
size_t | payload_size | ||
) |
Constructor to set single fields and client ID.
clid | client ID |
cid | component ID |
msg_id | message type ID |
payload | pointer to payload buffer |
payload_size | size of payload buffer |
Definition at line 221 of file message.cpp.
References fawkes::fawkes_message_header_t::cid, cid(), clid(), fawkes::fawkes_message_t::header, fawkes::fawkes_message_header_t::msg_id, fawkes::fawkes_message_t::payload, payload(), fawkes::fawkes_message_header_t::payload_size, and payload_size().
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | unsigned int | clid, |
unsigned short int | cid, | ||
unsigned short int | msg_id | ||
) |
Constructor to set single fields and client ID without payload.
clid | client ID |
cid | component ID |
msg_id | message type ID |
Definition at line 244 of file message.cpp.
References fawkes::fawkes_message_header_t::cid, cid(), clid(), fawkes::fawkes_message_t::header, fawkes::fawkes_message_header_t::msg_id, fawkes::fawkes_message_t::payload, and fawkes::fawkes_message_header_t::payload_size.
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | unsigned short int | cid, |
unsigned short int | msg_id, | ||
void * | payload, | ||
size_t | payload_size | ||
) |
Constructor to set single fields.
The client ID is set to zero.
cid | component ID |
msg_id | message type ID |
payload | pointer to payload buffer |
payload_size | size of payload buffer |
Definition at line 123 of file message.cpp.
References fawkes::fawkes_message_header_t::cid, cid(), fawkes::fawkes_message_t::header, fawkes::fawkes_message_header_t::msg_id, fawkes::fawkes_message_t::payload, payload(), fawkes::fawkes_message_header_t::payload_size, and payload_size().
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | unsigned int | clid, |
unsigned short int | cid, | ||
unsigned short int | msg_id, | ||
FawkesNetworkMessageContent * | content | ||
) |
Constructor to set single fields and client ID.
clid | client ID |
cid | component ID |
msg_id | message type ID |
content | complex content object |
Definition at line 201 of file message.cpp.
References fawkes::fawkes_message_header_t::cid, cid(), clid(), fawkes::fawkes_message_t::header, fawkes::fawkes_message_header_t::msg_id, fawkes::fawkes_message_t::payload, and fawkes::fawkes_message_header_t::payload_size.
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | unsigned short int | cid, |
unsigned short int | msg_id, | ||
FawkesNetworkMessageContent * | content | ||
) |
Constructor to set single fields.
The client ID is set to zero.
cid | component ID |
msg_id | message type ID |
content | complex content object |
Definition at line 183 of file message.cpp.
References fawkes::fawkes_message_header_t::cid, cid(), fawkes::fawkes_message_t::header, fawkes::fawkes_message_header_t::msg_id, fawkes::fawkes_message_t::payload, and fawkes::fawkes_message_header_t::payload_size.
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | unsigned short int | cid, |
unsigned short int | msg_id, | ||
size_t | payload_size | ||
) |
Constructor to set single fields and allocate memory.
The client ID is set to zero. The payload memory is allocated on the heap.
cid | component ID |
msg_id | message type ID |
payload_size | size of payload buffer |
Definition at line 146 of file message.cpp.
References fawkes::fawkes_message_header_t::cid, cid(), fawkes::fawkes_message_t::header, fawkes::fawkes_message_header_t::msg_id, fawkes::fawkes_message_t::payload, fawkes::fawkes_message_header_t::payload_size, and payload_size().
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | unsigned short int | cid, |
unsigned short int | msg_id | ||
) |
Constructor to set single fields without payload.
The client ID is set to zero.
cid | component ID |
msg_id | message type ID |
Definition at line 167 of file message.cpp.
References fawkes::fawkes_message_header_t::cid, cid(), fawkes::fawkes_message_t::header, fawkes::fawkes_message_header_t::msg_id, fawkes::fawkes_message_t::payload, and fawkes::fawkes_message_header_t::payload_size.
fawkes::FawkesNetworkMessage::FawkesNetworkMessage | ( | ) |
Constructor.
Plain constructor. All values initialized to zero, including the client ID.
Definition at line 87 of file message.cpp.
|
virtual |
Destructor.
This destructor also frees the payload buffer if set!
Definition at line 259 of file message.cpp.
References fawkes::fawkes_message_t::payload.
unsigned short int fawkes::FawkesNetworkMessage::cid | ( | ) | const |
Get component ID.
Definition at line 285 of file message.cpp.
References fawkes::fawkes_message_header_t::cid, and fawkes::fawkes_message_t::header.
Referenced by fawkes::FawkesNetworkClient::enqueue_and_wait(), FawkesNetworkMessage(), fawkes::NetworkLogger::handle_network_message(), fawkes::FawkesNetworkServerThread::loop(), msgc(), fawkes::NetworkConfiguration::NetConfValueIterator::NetConfValueIterator(), fawkes::FawkesNetworkClientRecvThread::recv(), and set_component_id().
unsigned int fawkes::FawkesNetworkMessage::clid | ( | ) | const |
Get client ID.
Definition at line 276 of file message.cpp.
Referenced by fawkes::BlackBoardInterfaceProxy::BlackBoardInterfaceProxy(), FawkesNetworkMessage(), ExampleNetworkThread::handle_network_message(), fawkes::NetworkLogger::handle_network_message(), fawkes::BlackBoardNetworkHandler::loop(), fawkes::ConfigNetworkHandler::loop(), fawkes::PluginNetworkHandler::loop(), fawkes::FawkesNetworkServerThread::send(), and set_client_id().
const fawkes_message_t & fawkes::FawkesNetworkMessage::fmsg | ( | ) | const |
Get message reference.
Definition at line 321 of file message.cpp.
Referenced by fawkes::FawkesNetworkTransceiver::send().
|
inline |
Get correctly casted payload.
Use this method to cast the payload to a specific type. The size is check as a sanity check and a TypeMismatchException is thrown if the size does not match.
TypeMismatchException | payload size does not match requested type |
Definition at line 120 of file message.h.
References fawkes::fawkes_message_t::payload, and payload_size().
Referenced by FawkesNetworkMessage(), fawkes::BlackBoardNetworkHandler::loop(), fawkes::ConfigNetworkHandler::loop(), and set().
|
inline |
Get correctly parsed output.
Use this method to cast the payload to a specific complex type. You can use this routine to parse complex messages that are derived from FawkesNetworkMessageContent. Note that the class must provide a constructor that takes four parameters: The component ID, message ID, a pointer to the payload and the payload size. From this the class shall parse the output and throw an exception if that for whatever reason fails.
TypeMismatchException | payload size does not match requested type |
Definition at line 159 of file message.h.
References cid(), msgid(), fawkes::fawkes_message_t::payload, and payload_size().
Referenced by fawkes::RemoteBlackBoard::list(), and fawkes::RemoteBlackBoard::list_all().
|
inline |
Get correctly casted payload.
Use this method to cast the payload to a specific type. The size is check as a sanity check and a TypeMismatchException is thrown if the size does not match. The size of the received message must be greater or equal to the size of the message type. Useful if message contains a variable length string.
TypeMismatchException | payload size does not match requested type |
Definition at line 139 of file message.h.
References fawkes::fawkes_message_t::payload, and payload_size().
Referenced by fawkes::NetworkConfiguration::NetConfValueIterator::get_bool(), fawkes::NetworkConfiguration::get_bool(), fawkes::NetworkConfiguration::NetConfValueIterator::get_bools(), fawkes::NetworkConfiguration::NetConfValueIterator::get_comment(), fawkes::NetworkConfiguration::get_comment(), fawkes::NetworkConfiguration::get_default_comment(), fawkes::NetworkConfiguration::NetConfValueIterator::get_float(), fawkes::NetworkConfiguration::get_float(), fawkes::NetworkConfiguration::NetConfValueIterator::get_floats(), fawkes::NetworkConfiguration::NetConfValueIterator::get_int(), fawkes::NetworkConfiguration::get_int(), fawkes::NetworkConfiguration::NetConfValueIterator::get_ints(), fawkes::NetworkConfiguration::NetConfValueIterator::get_list_size(), fawkes::NetworkConfiguration::NetConfValueIterator::get_string(), fawkes::NetworkConfiguration::get_string(), fawkes::NetworkConfiguration::NetConfValueIterator::get_strings(), fawkes::NetworkConfiguration::NetConfValueIterator::get_uint(), fawkes::NetworkConfiguration::get_uint(), fawkes::NetworkConfiguration::NetConfValueIterator::get_uints(), fawkes::NetworkConfiguration::NetConfValueIterator::is_default(), and fawkes::NetworkConfiguration::NetConfValueIterator::is_list().
unsigned short int fawkes::FawkesNetworkMessage::msgid | ( | ) | const |
Get message type ID.
Definition at line 294 of file message.cpp.
References fawkes::fawkes_message_t::header, and fawkes::fawkes_message_header_t::msg_id.
Referenced by fawkes::BlackBoardInterfaceProxy::BlackBoardInterfaceProxy(), fawkes::FawkesNetworkClient::enqueue_and_wait(), fawkes::NetworkConfiguration::NetConfValueIterator::get_as_string(), fawkes::NetworkConfiguration::NetConfValueIterator::get_bool(), fawkes::NetworkConfiguration::NetConfValueIterator::get_bools(), fawkes::NetworkConfiguration::NetConfValueIterator::get_comment(), fawkes::NetworkConfiguration::NetConfValueIterator::get_float(), fawkes::NetworkConfiguration::NetConfValueIterator::get_floats(), fawkes::NetworkConfiguration::NetConfValueIterator::get_int(), fawkes::NetworkConfiguration::NetConfValueIterator::get_ints(), fawkes::NetworkConfiguration::NetConfValueIterator::get_string(), fawkes::NetworkConfiguration::NetConfValueIterator::get_strings(), fawkes::NetworkConfiguration::NetConfValueIterator::get_uint(), fawkes::NetworkConfiguration::NetConfValueIterator::get_uints(), ExampleNetworkThread::handle_network_message(), fawkes::NetworkLogger::handle_network_message(), fawkes::NetworkConfiguration::NetConfValueIterator::is_bool(), fawkes::NetworkConfiguration::NetConfValueIterator::is_default(), fawkes::NetworkConfiguration::NetConfValueIterator::is_float(), fawkes::NetworkConfiguration::NetConfValueIterator::is_int(), fawkes::NetworkConfiguration::NetConfValueIterator::is_string(), fawkes::NetworkConfiguration::NetConfValueIterator::is_uint(), fawkes::RemoteBlackBoard::list(), fawkes::RemoteBlackBoard::list_all(), fawkes::BlackBoardNetworkHandler::loop(), fawkes::ConfigNetworkHandler::loop(), fawkes::PluginNetworkHandler::loop(), msgc(), fawkes::NetworkConfiguration::NetConfValueIterator::NetConfValueIterator(), fawkes::BlackBoardInterfaceProxy::process_data_changed(), fawkes::BlackBoardInterfaceProxy::process_interface_message(), and fawkes::NetworkConfiguration::NetConfValueIterator::type().
void fawkes::FawkesNetworkMessage::pack | ( | ) |
Pack data for sending.
If complex message sending is required (message content object has been set) then serialize() is called for the content and the message is prepared for sending.
Definition at line 392 of file message.cpp.
References fawkes::fawkes_message_t::header, fawkes::fawkes_message_t::payload, fawkes::FawkesNetworkMessageContent::payload(), fawkes::fawkes_message_header_t::payload_size, fawkes::FawkesNetworkMessageContent::payload_size(), and fawkes::FawkesNetworkMessageContent::serialize().
Referenced by fawkes::FawkesNetworkTransceiver::send().
void * fawkes::FawkesNetworkMessage::payload | ( | ) | const |
Get payload buffer.
Definition at line 312 of file message.cpp.
References fawkes::fawkes_message_t::payload.
Referenced by fawkes::BlackBoardInterfaceProxy::BlackBoardInterfaceProxy(), FawkesNetworkMessage(), fawkes::NetworkConfiguration::NetConfValueIterator::get_bool(), fawkes::NetworkConfiguration::get_bool(), fawkes::NetworkConfiguration::NetConfValueIterator::get_float(), fawkes::NetworkConfiguration::get_float(), fawkes::NetworkConfiguration::NetConfValueIterator::get_int(), fawkes::NetworkConfiguration::get_int(), fawkes::NetworkConfiguration::NetConfValueIterator::get_string(), fawkes::NetworkConfiguration::get_string(), fawkes::NetworkConfiguration::NetConfValueIterator::get_uint(), fawkes::NetworkConfiguration::get_uint(), ExampleNetworkThread::handle_network_message(), fawkes::BlackBoardNetworkHandler::loop(), fawkes::ConfigNetworkHandler::loop(), fawkes::PluginNetworkHandler::loop(), fawkes::NetworkConfiguration::NetConfValueIterator::NetConfValueIterator(), fawkes::BlackBoardInterfaceProxy::process_data_changed(), fawkes::BlackBoardInterfaceProxy::process_interface_message(), and set_payload().
size_t fawkes::FawkesNetworkMessage::payload_size | ( | ) | const |
Get payload size.
Definition at line 303 of file message.cpp.
References fawkes::fawkes_message_t::header, and fawkes::fawkes_message_header_t::payload_size.
Referenced by FawkesNetworkMessage(), ExampleNetworkThread::handle_network_message(), fawkes::ConfigNetworkHandler::loop(), fawkes::PluginNetworkHandler::loop(), msg(), msgc(), msgge(), fawkes::NetworkConfiguration::NetConfValueIterator::NetConfValueIterator(), fawkes::FawkesNetworkTransceiver::send(), and set_payload().
void fawkes::FawkesNetworkMessage::set | ( | fawkes_message_t & | msg | ) |
Set from message.
msg | reference to message. Content is deep-copied. |
Definition at line 372 of file message.cpp.
References msg().
void fawkes::FawkesNetworkMessage::set_client_id | ( | unsigned int | clid | ) |
Set client ID.
clid | client ID |
Definition at line 330 of file message.cpp.
References clid().
void fawkes::FawkesNetworkMessage::set_component_id | ( | unsigned short int | cid | ) |
Set component ID.
cid | component ID |
Definition at line 339 of file message.cpp.
References fawkes::fawkes_message_header_t::cid, cid(), and fawkes::fawkes_message_t::header.
void fawkes::FawkesNetworkMessage::set_content | ( | FawkesNetworkMessageContent * | content | ) |
Set complex message content.
content | complex message content. |
Definition at line 381 of file message.cpp.
void fawkes::FawkesNetworkMessage::set_message_id | ( | unsigned short int | msg_id | ) |
Set message type ID.
msg_id | message type ID |
Definition at line 348 of file message.cpp.
References fawkes::fawkes_message_t::header, and fawkes::fawkes_message_header_t::msg_id.
void fawkes::FawkesNetworkMessage::set_payload | ( | void * | payload, |
size_t | payload_size | ||
) |
Set payload.
payload | pointer to payload buffer |
payload_size | size of payload buffer |
Definition at line 358 of file message.cpp.
References fawkes::fawkes_message_t::header, fawkes::fawkes_message_t::payload, payload(), fawkes::fawkes_message_header_t::payload_size, and payload_size().