Public Member Functions

fawkes::FawkesNetworkMessage Class Reference
[Fawkes Network Communication]

Representation of a message that is sent over the network. More...

#include <netcomm/fawkes/message.h>

Inheritance diagram for fawkes::FawkesNetworkMessage:
Inheritance graph
[legend]

List of all members.

Public Member Functions

 FawkesNetworkMessage (unsigned int clid, fawkes_message_t &msg)
 Constructor to set message and client ID.
 FawkesNetworkMessage (fawkes_message_t &msg)
 Constructor that only sets message.
 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.
 FawkesNetworkMessage (unsigned int clid, unsigned short int cid, unsigned short int msg_id)
 Constructor to set single fields and client ID without payload.
 FawkesNetworkMessage (unsigned short int cid, unsigned short int msg_id, void *payload, size_t payload_size)
 Constructor to set single fields.
 FawkesNetworkMessage (unsigned int clid, unsigned short int cid, unsigned short int msg_id, FawkesNetworkMessageContent *content)
 Constructor to set single fields and client ID.
 FawkesNetworkMessage (unsigned short int cid, unsigned short int msg_id, FawkesNetworkMessageContent *content)
 Constructor to set single fields.
 FawkesNetworkMessage (unsigned short int cid, unsigned short int msg_id, size_t payload_size)
 Constructor to set single fields and allocate memory.
 FawkesNetworkMessage (unsigned short int cid, unsigned short int msg_id)
 Constructor to set single fields without payload.
 FawkesNetworkMessage ()
 Constructor.
virtual ~FawkesNetworkMessage ()
 Destructor.
unsigned int clid () const
 Get client ID.
unsigned short int cid () const
 Get component ID.
unsigned short int msgid () const
 Get message type ID.
size_t payload_size () const
 Get payload size.
void * payload () const
 Get payload buffer.
const fawkes_message_tfmsg () const
 Get message reference.
template<typename MT >
MT * msg () const
 Get correctly casted payload.
template<typename MT >
MT * msgge () const
 Get correctly casted payload.
template<typename MT >
MT * msgc () const
 Get correctly parsed output.
void set_client_id (unsigned int clid)
 Set client ID.
void set_component_id (unsigned short int cid)
 Set component ID.
void set_message_id (unsigned short int msg_id)
 Set message type ID.
void set_payload (void *payload, size_t payload_size)
 Set payload.
void set (fawkes_message_t &msg)
 Set from message.
void set_content (FawkesNetworkMessageContent *content)
 Set complex message content.
void pack ()
 Pack data for sending.

Detailed Description

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:

 unsigned int u = 0;
 FawkesNetworkMessage *m = new FawkesNetworkMessage(clid, cid, msgid, &u, sizeof(u));

Rather you have to use the following code:

 unsigned int *u = (unsigned int *)malloc(sizeof(unsigned int));
 *u = 0;
 FawkesNetworkMessage *m = new FawkesNetworkMessage(clid, cid, msgid, u, sizeof(unsigned int));
Author:
Tim Niemueller

Definition at line 75 of file message.h.


Constructor & Destructor Documentation

fawkes::FawkesNetworkMessage::FawkesNetworkMessage ( unsigned int  clid,
fawkes_message_t msg 
)

Constructor to set message and client ID.

Parameters:
clid client ID
msg reference to message, deep-copied into local message.

Definition at line 99 of file message.cpp.

fawkes::FawkesNetworkMessage::FawkesNetworkMessage ( fawkes_message_t msg  ) 

Constructor that only sets message.

The client ID is zero.

Parameters:
msg reference to message, deep-copied into local message.

Definition at line 111 of file message.cpp.

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.

Parameters:
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 226 of file message.cpp.

References fawkes::fawkes_message_header_t::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 int  clid,
unsigned short int  cid,
unsigned short int  msg_id 
)

Constructor to set single fields and client ID without payload.

Parameters:
clid client ID
cid component ID
msg_id message type ID

Definition at line 248 of file message.cpp.

References fawkes::fawkes_message_header_t::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,
void *  payload,
size_t  payload_size 
)

Constructor to set single fields.

The client ID is set to zero.

Parameters:
cid component ID
msg_id message type ID
payload pointer to payload buffer
payload_size size of payload buffer

Definition at line 126 of file message.cpp.

References fawkes::fawkes_message_header_t::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 int  clid,
unsigned short int  cid,
unsigned short int  msg_id,
FawkesNetworkMessageContent content 
)

Constructor to set single fields and client ID.

Parameters:
clid client ID
cid component ID
msg_id message type ID
content complex content object

Definition at line 205 of file message.cpp.

References fawkes::fawkes_message_header_t::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,
FawkesNetworkMessageContent content 
)

Constructor to set single fields.

The client ID is set to zero.

Parameters:
cid component ID
msg_id message type ID
content complex content object

Definition at line 187 of file message.cpp.

References fawkes::fawkes_message_header_t::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.

Parameters:
cid component ID
msg_id message type ID
payload_size size of payload buffer

Definition at line 149 of file message.cpp.

References fawkes::fawkes_message_header_t::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 
)

Constructor to set single fields without payload.

The client ID is set to zero.

Parameters:
cid component ID
msg_id message type ID

Definition at line 170 of file message.cpp.

References fawkes::fawkes_message_header_t::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.

fawkes::FawkesNetworkMessage::~FawkesNetworkMessage (  )  [virtual]

Destructor.

This destructor also frees the payload buffer if set!

Definition at line 263 of file message.cpp.

References fawkes::fawkes_message_t::payload.


Member Function Documentation

unsigned short int fawkes::FawkesNetworkMessage::cid (  )  const
unsigned int fawkes::FawkesNetworkMessage::clid (  )  const
const fawkes_message_t & fawkes::FawkesNetworkMessage::fmsg (  )  const

Get message reference.

Returns:
reference to internal fawkes_message_t, use with care!

Definition at line 331 of file message.cpp.

Referenced by fawkes::FawkesNetworkTransceiver::send().

template<typename MT >
MT* fawkes::FawkesNetworkMessage::msg (  )  const [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.

Returns:
casted message
Exceptions:
TypeMismatchException payload size does not match requested type

Definition at line 115 of file message.h.

References fawkes::fawkes_message_t::payload, and payload_size().

Referenced by fawkes::NetworkConfiguration::NetConfValueIterator::get_bool(), fawkes::NetworkConfiguration::NetConfValueIterator::get_float(), fawkes::NetworkConfiguration::NetConfValueIterator::get_int(), fawkes::NetworkConfiguration::NetConfValueIterator::get_uint(), fawkes::NetworkConfiguration::NetConfValueIterator::is_default(), fawkes::ConfigNetworkHandler::loop(), and fawkes::BlackBoardNetworkHandler::loop().

template<typename MT >
MT* fawkes::FawkesNetworkMessage::msgc (  )  const [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.

Returns:
casted message
Exceptions:
TypeMismatchException payload size does not match requested type

Definition at line 154 of file message.h.

References cid(), msgid(), and fawkes::fawkes_message_t::payload.

template<typename MT >
MT* fawkes::FawkesNetworkMessage::msgge (  )  const [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.

Returns:
casted message
Exceptions:
TypeMismatchException payload size does not match requested type

Definition at line 134 of file message.h.

References fawkes::fawkes_message_t::payload, and payload_size().

Referenced by fawkes::NetworkConfiguration::NetConfValueIterator::get_comment(), fawkes::NetworkConfiguration::NetConfValueIterator::get_string(), fawkes::NetworkConfiguration::NetConfValueIterator::is_default(), and fawkes::ConfigNetworkHandler::loop().

unsigned short int fawkes::FawkesNetworkMessage::msgid (  )  const

Get message type ID.

Returns:
message type ID

Definition at line 301 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_bool(), fawkes::NetworkConfiguration::NetConfValueIterator::get_comment(), fawkes::NetworkConfiguration::NetConfValueIterator::get_float(), fawkes::NetworkConfiguration::NetConfValueIterator::get_int(), fawkes::NetworkConfiguration::NetConfValueIterator::get_string(), fawkes::NetworkConfiguration::NetConfValueIterator::get_uint(), 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::ConfigNetworkHandler::loop(), fawkes::PluginNetworkHandler::loop(), fawkes::BlackBoardNetworkHandler::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 409 of file message.cpp.

References fawkes::fawkes_message_t::header, fawkes::FawkesNetworkMessageContent::payload(), fawkes::fawkes_message_t::payload, fawkes::FawkesNetworkMessageContent::payload_size(), fawkes::fawkes_message_header_t::payload_size, and fawkes::FawkesNetworkMessageContent::serialize().

Referenced by fawkes::FawkesNetworkTransceiver::send().

void * fawkes::FawkesNetworkMessage::payload (  )  const
size_t fawkes::FawkesNetworkMessage::payload_size (  )  const
void fawkes::FawkesNetworkMessage::set ( fawkes_message_t msg  ) 

Set from message.

Parameters:
msg reference to message. Content is deep-copied.

Definition at line 387 of file message.cpp.

void fawkes::FawkesNetworkMessage::set_client_id ( unsigned int  clid  ) 

Set client ID.

Parameters:
clid client ID

Definition at line 341 of file message.cpp.

void fawkes::FawkesNetworkMessage::set_component_id ( unsigned short int  cid  ) 

Set component ID.

Parameters:
cid component ID

Definition at line 351 of file message.cpp.

References fawkes::fawkes_message_header_t::cid, and fawkes::fawkes_message_t::header.

void fawkes::FawkesNetworkMessage::set_content ( FawkesNetworkMessageContent content  ) 

Set complex message content.

Parameters:
content complex message content.

Definition at line 397 of file message.cpp.

void fawkes::FawkesNetworkMessage::set_message_id ( unsigned short int  msg_id  ) 

Set message type ID.

Parameters:
msg_id message type ID

Definition at line 361 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.

Parameters:
payload pointer to payload buffer
payload_size size of payload buffer

Definition at line 372 of file message.cpp.

References fawkes::fawkes_message_t::header, fawkes::fawkes_message_t::payload, and fawkes::fawkes_message_header_t::payload_size.


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