24 #include <interface/message.h> 25 #include <interface/interface.h> 27 #include <core/threading/thread.h> 28 #include <core/threading/mutex.h> 29 #include <core/exceptions/software.h> 30 #include <utils/time/time.h> 69 __fieldinfo_list = NULL;
79 __time_enqueued =
new Time();
81 _transmit_via_iface = NULL;
82 sender_interface_instance_serial = 0;
83 recipient_interface_mem_serial = 0;
87 _sender_thread_name = strdup(t->
name());
89 _sender_thread_name = strdup(
"Unknown");
100 __hops = mesg.__hops;
102 __num_fields = mesg.__num_fields;
107 _type = strdup(mesg._type);
108 __time_enqueued =
new Time(mesg.__time_enqueued);
110 _transmit_via_iface = NULL;
111 sender_interface_instance_serial = 0;
112 recipient_interface_mem_serial = 0;
121 *info_dest = new_info;
123 info_dest = &((*info_dest)->next);
124 info_src = info_src->
next;
129 _sender_thread_name = strdup(t->
name());
131 _sender_thread_name = strdup(
"Unknown");
142 __hops = mesg->__hops;
144 __num_fields = mesg->__num_fields;
149 _type = strdup(mesg->_type);
150 _transmit_via_iface = NULL;
151 sender_interface_instance_serial = 0;
152 recipient_interface_mem_serial = 0;
153 __time_enqueued =
new Time(mesg->__time_enqueued);
162 *info_dest = new_info;
164 info_dest = &((*info_dest)->next);
165 info_src = info_src->
next;
170 _sender_thread_name = strdup(t->
name());
172 _sender_thread_name = strdup(
"Unknown");
180 free(_sender_thread_name);
182 delete __time_enqueued;
186 __fieldinfo_list = __fieldinfo_list->
next;
188 infol = __fieldinfo_list;
219 __message_id = message_id;
237 __time_enqueued->
stamp();
238 long sec = 0, usec = 0;
267 return __time_enqueued;
277 return recipient_interface_mem_serial;
337 return _sender_thread_name;
358 _transmit_via_iface = iface;
359 _sender_id = iface->
serial();
360 recipient_interface_mem_serial = iface->
mem_serial();
370 return _transmit_via_iface;
437 size_t length,
void *value,
const char *enumtype,
445 newinfo->
name = name;
447 newinfo->
value = value;
449 newinfo->
next = NULL;
451 if ( infol == NULL ) {
453 __fieldinfo_list = newinfo;
456 while ( infol->
next != NULL ) {
459 infol->
next = newinfo;
Interface field iterator.
const char * sender_thread_name() const
Get sender of message.
const Time * time_enqueued() const
Get time when message was enqueued.
void * data_ptr
Pointer to memory that contains local data.
Interface * interface() const
Get transmitting interface.
Base class for all messages passed through interfaces in Fawkes BlackBoard.
unsigned int id() const
Get message ID.
void mark_enqueued()
Mark message as being enqueued.
void get_timestamp(long &sec, long &usec) const
Get time stamp.
Interface field info list.
Fawkes library namespace.
const char * name
Name of this field.
Timestamp data, must be present and first entries for each interface data structs! This leans on time...
interface_fieldinfo_t * next
next field, NULL if last
A class for handling time.
Thread class encapsulation of pthreads.
Base class for all Fawkes BlackBoard interfaces.
bool enqueued() const
Check is message has been enqueued.
InterfaceFieldIterator fields_end()
Invalid iterator.
static Thread * current_thread_noexc()
Similar to current_thread, but does never throw an exception.
const void * datachunk() const
Get pointer to data.
message_data_ts_t * data_ts
data timestamp aliasing pointer
void * value
Current value of this field.
unsigned int data_size
Size of memory needed to hold all data.
unsigned int mem_serial() const
Get memory serial of interface.
const interface_enum_map_t * enum_map
Map of possible enum values.
Message(const char *type)
Constructor.
unsigned int sender_id() const
Get ID of sender.
virtual ~Message()
Destructor.
unsigned short serial() const
Get instance serial of interface.
void set_from_chunk(const void *chunk)
Set from raw data chunk.
unsigned int hops() const
Get number of hops.
interface_fieldtype_t type
type of this field
int64_t timestamp_usec
additional time microseconds
const char * name() const
Get name of thread.
size_t length
Length of field (array, string)
unsigned int recipient() const
Get recipient memory serial.
InterfaceFieldIterator fields()
Get iterator over all fields of this interface instance.
void set_time(const timeval *tv)
Sets the time.
int64_t timestamp_sec
time in seconds since Unix epoch
const char * enumtype
text representation of enum type
unsigned int datasize() const
Get size of data.
unsigned int num_fields() const
Get the number of fields in the message.
Time & stamp()
Set this time to the current time.
void add_fieldinfo(interface_fieldtype_t type, const char *name, size_t length, void *value, const char *enumtype=0, const interface_enum_map_t *enum_map=0)
Add an entry to the info list.
void set_hops(unsigned int hops)
Set number of hops.
interface_fieldtype_t
Interface field type.
std::map< int, std::string > interface_enum_map_t
Map of enum integer to string values.
const char * type() const
Get message type.
Message & operator=(const Message &m)
Assign this message to given message.
void set_id(unsigned int message_id)
Set message ID.
virtual Message * clone() const
Clone this message.