27 #include <blackboard/local.h> 28 #include <blackboard/remote.h> 29 #include <blackboard/exceptions.h> 30 #include <blackboard/bbconfig.h> 31 #include <blackboard/interface_listener.h> 32 #include <blackboard/interface_observer.h> 34 #include <interfaces/TestInterface.h> 36 #include <core/threading/thread.h> 37 #include <core/exceptions/system.h> 38 #include <logging/liblogger.h> 51 class QaBBEventListener
60 bbio_add_observed_create(
"TestInterface",
"AnotherID *");
61 bbio_add_observed_destroy(
"TestInterface");
64 virtual void bb_interface_created(
const char *type,
const char *
id)
throw()
66 printf(
"BBIO: Interface %s of type %s has been created\n",
id, type);
69 virtual void bb_interface_destroyed(
const char *type,
const char *
id)
throw()
71 printf(
"BBIO: Interface %s of type %s has been destroyed\n",
id, type);
75 virtual void bb_interface_data_changed(
Interface *interface)
throw()
77 printf(
"BBIL: Data in interface %s has been modified\n", interface->uid());
80 virtual bool bb_interface_message_received(
Interface *interface,
Message *message)
throw()
82 printf(
"BBIL: Message of type %s for interface %s has been received\n",
83 message->type(), interface->uid());
85 if (strcmp(message->type(),
"SetTestStringMessage") == 0) {
86 printf(
"BBIL: Received message of type %s, unregistering from inside " 87 "event handler\n", message->type());
88 bbil_remove_message_interface(interface);
89 __bb->update_listener(
this);
94 virtual void bb_interface_writer_added(
Interface *interface,
unsigned int instance_serial)
throw()
96 printf(
"BBIL: Writer has been added to interface %s/%u (event serial %u)\n",
97 interface->uid(), interface->serial(), instance_serial);
100 virtual void bb_interface_writer_removed(
Interface *interface,
unsigned int instance_serial)
throw()
102 printf(
"BBIL: Writer has been removed from interface %s/%u (event serial %u)\n",
103 interface->uid(), interface->serial(), instance_serial);
106 virtual void bb_interface_reader_added(
Interface *interface,
unsigned int instance_serial)
throw()
108 printf(
"BBIL: Reader has been added to interface %s/%u (event serial %u)\n",
109 interface->uid(), interface->serial(), instance_serial);
112 virtual void bb_interface_reader_removed(
Interface *interface,
unsigned int instance_serial)
throw()
114 printf(
"BBIL: Reader has been removed from interface %s/%u (event serial %u)\n",
115 interface->uid(), interface->serial(), instance_serial);
118 virtual void add_interface(
Interface *interface)
throw()
120 printf(
"Listener: Adding interface %s (this: %p)\n", interface->uid(),
this);
121 bbil_add_data_interface(interface);
123 if ( ! interface->is_writer() ) {
124 printf(
"Trying to add non-writing instance as message listener, this will fail\n");
126 bbil_add_message_interface(interface);
127 if ( ! interface->is_writer() ) {
128 printf(
"Did not fail!? BUG!\n");
131 if ( ! interface->is_writer() ) {
132 printf(
"Failed as expected (%s). Good.\n", e.
what());
135 bbil_add_reader_interface(interface);
136 bbil_add_writer_interface(interface);
145 main(
int argc,
char **argv)
153 QaBBEventListener qabbel(bb);
166 cout <<
"Opening interfaces.. (SomeID *)" << endl;
172 qabbel.add_interface(ti_writer_1);
173 qabbel.add_interface(ti_writer_2);
174 qabbel.add_interface(ti_reader_2);
178 cout <<
"Opening interfaces.. (SomeID 3, should NOT trigger BBIO)" << endl;
180 cout <<
"Opening interfaces.. (AnotherID *, SHOULD trigger BBIO)" << endl;
184 cout <<
"success" << endl;
186 cout <<
"failed! Aborting" << endl;
195 for (std::list<TestInterface *>::iterator i = readers.begin(); i != readers.end(); ++i) {
196 printf(
"Opened reader for interface %s of type %s\n", (*i)->id(), (*i)->type());
202 const char* pattern =
"AnotherID *";
204 printf(
"Found %zu interfaces with pattern \"%s\"\n", readers.size(), pattern);
205 for (std::list<TestInterface *>::iterator i = readers.begin(); i != readers.end(); ++i) {
206 printf(
"Opened reader for interface %s of type %s\n", (*i)->id(), (*i)->type());
212 printf(
"Sending a message to test message received event\n");
215 printf(
"Message ID = %u, enqueued messages: %u\n", msg_id, ti_writer_1->
msgq_size());
217 printf(
"Sending message triggering update in event handler\n");
222 printf(
"Sending another message, should NOT trigger BBIL!\n");
225 printf(
"Another message sent!\n");
227 printf(
"Removing writer 1. BBIL output should appear\n");
228 bb->
close(ti_writer_1);
229 printf(
"Removing writer 1 DONE\n");
234 printf(
"Removing other writers. No warning should appear.\n");
235 bb->
close(ti_writer_2);
236 bb->
close(ti_writer_3);
237 bb->
close(ti_writer_4);
238 bb->
close(ti_writer_5);
239 bb->
close(ti_writer_6);
241 bb->
close(ti_reader_1);
242 bb->
close(ti_reader_2);
247 Thread::destroy_main();
248 LibLogger::finalize();
virtual void register_observer(BlackBoardInterfaceObserver *observer)
Register BB interface observer.
Base class for all messages passed through interfaces in Fawkes BlackBoard.
Fawkes library namespace.
virtual const char * what() const
Get primary string.
virtual void unregister_listener(BlackBoardInterfaceListener *listener)
Unregister BB interface listener.
Base class for all Fawkes BlackBoard interfaces.
unsigned int msgq_size()
Get size of message queue.
virtual void register_listener(BlackBoardInterfaceListener *listener, ListenerRegisterFlag flag=BBIL_FLAG_ALL)
Register BB event listener.
Base class for exceptions in Fawkes.
SetTestIntMessage Fawkes BlackBoard Interface Message.
virtual std::list< Interface * > open_multiple_for_reading(const char *type_pattern, const char *id_pattern="*", const char *owner=NULL)=0
Open multiple interfaces for reading.
BlackBoard interface observer.
unsigned int msgq_enqueue(Message *message)
Enqueue message at end of queue.
void print_trace()
Prints trace to stderr.
virtual Interface * open_for_reading(const char *interface_type, const char *identifier, const char *owner=NULL)=0
Open interface for reading.
The BlackBoard abstract class.
SetTestStringMessage Fawkes BlackBoard Interface Message.
virtual Interface * open_for_writing(const char *interface_type, const char *identifier, const char *owner=NULL)=0
Open interface for writing.
BlackBoard interface listener.
TestInterface Fawkes BlackBoard Interface.
virtual void close(Interface *interface)=0
Close interface.