24 #include <gui_utils/interface_dispatcher.h> 25 #include <interface/interface.h> 48 bool message_enqueueing)
51 __message_enqueueing = message_enqueueing;
72 std::list<Interface *> ifaces,
73 bool message_enqueueing)
76 __message_enqueueing = message_enqueueing;
78 std::list<Interface *>::iterator i;
79 for (i = ifaces.begin(); i != ifaces.end(); ++i) {
81 if ( (*i)->is_writer() ) {
93 InterfaceDispatcher::setup_signals()
112 __message_enqueueing = enqueue;
122 __queue_data_changed.lock();
123 while (! __queue_data_changed.empty()) {
124 Interface *iface = __queue_data_changed.front();
125 __signal_data_changed.emit(iface);
126 __queue_data_changed.pop();
128 __queue_data_changed.unlock();
138 __queue_message_received.lock();
139 while (! __queue_message_received.empty()) {
140 std::pair<Interface *, Message *> p = __queue_message_received.front();
141 __signal_message_received.emit(p.first, p.second);
143 __queue_message_received.pop();
145 __queue_message_received.unlock();
155 __queue_writer_added.lock();
156 while (! __queue_writer_added.empty()) {
157 Interface *iface = __queue_writer_added.front();
158 __signal_writer_added.emit(iface);
159 __queue_writer_added.pop();
161 __queue_writer_added.unlock();
171 __queue_writer_removed.lock();
172 while (! __queue_writer_removed.empty()) {
173 Interface *iface = __queue_writer_removed.front();
174 __signal_writer_removed.emit(iface);
175 __queue_writer_removed.pop();
177 __queue_writer_removed.unlock();
187 __queue_reader_added.lock();
188 while (! __queue_reader_added.empty()) {
189 Interface *iface = __queue_reader_added.front();
190 __signal_reader_added.emit(iface);
191 __queue_reader_added.pop();
193 __queue_reader_added.unlock();
203 __queue_reader_removed.lock();
204 while (! __queue_reader_removed.empty()) {
205 Interface *iface = __queue_reader_removed.front();
206 __signal_reader_removed.emit(iface);
207 __queue_reader_removed.pop();
209 __queue_reader_removed.unlock();
216 __queue_data_changed.push_locked(interface);
217 __dispatcher_data_changed();
224 __queue_message_received.push_locked(std::make_pair(interface, message));
225 __dispatcher_message_received();
226 return __message_enqueueing;
231 unsigned int instance_serial)
throw()
233 __queue_writer_added.push_locked(interface);
234 __dispatcher_writer_added();
239 unsigned int instance_serial)
throw()
241 __queue_writer_removed.push_locked(interface);
242 __dispatcher_writer_removed();
247 unsigned int instance_serial)
throw()
249 __queue_reader_added.push_locked(interface);
250 __dispatcher_reader_added();
255 unsigned int instance_serial)
throw()
257 __queue_reader_removed.push_locked(interface);
258 __dispatcher_reader_removed();
265 sigc::signal<void, Interface *>
268 return __signal_data_changed;
278 sigc::signal<void, Interface *, Message *>
281 return __signal_message_received;
289 sigc::signal<void, Interface *>
292 return __signal_writer_added;
300 sigc::signal<void, Interface *>
303 return __signal_writer_removed;
311 sigc::signal<void, Interface *>
314 return __signal_reader_added;
322 sigc::signal<void, Interface *>
325 return __signal_reader_removed;
Base class for all messages passed through interfaces in Fawkes BlackBoard.
virtual void on_data_changed()
Internal event handler.
virtual void on_message_received()
Internal event handler.
virtual void bb_interface_writer_added(Interface *interface, unsigned int instance_serial)
A writing instance has been opened for a watched interface.
virtual void bb_interface_reader_removed(Interface *interface, unsigned int instance_serial)
A reading instance has been closed for a watched interface.
Fawkes library namespace.
void bbil_add_writer_interface(Interface *interface)
Add an interface to the writer addition/removal watch list.
virtual bool bb_interface_message_received(Interface *interface, Message *message)
BlackBoard message received notification.
sigc::signal< void, Interface * > signal_writer_removed()
Get "writer removed" signal.
virtual void bb_interface_reader_added(Interface *interface, unsigned int instance_serial)
A reading instance has been opened for a watched interface.
virtual void on_writer_removed()
Internal event handler.
Base class for all Fawkes BlackBoard interfaces.
virtual void on_reader_removed()
Internal event handler.
virtual void bb_interface_writer_removed(Interface *interface, unsigned int instance_serial)
A writing instance has been closed for a watched interface.
virtual void bb_interface_data_changed(Interface *interface)
BlackBoard data changed notification.
bool is_writer() const
Check if this is a writing instance.
sigc::signal< void, Interface * > signal_reader_removed()
Get "reader removed" signal.
void bbil_add_reader_interface(Interface *interface)
Add an interface to the reader addition/removal watch list.
sigc::signal< void, Interface * > signal_writer_added()
Get "writer added" signal.
virtual void on_writer_added()
Internal event handler.
InterfaceDispatcher(const char *listener_name, fawkes::Interface *iface, bool message_enqueueing=true)
Constructor.
virtual void on_reader_added()
Internal event handler.
void bbil_add_message_interface(Interface *interface)
Add an interface to the message received watch list.
sigc::signal< void, Interface * > signal_reader_added()
Get "reader added" signal.
BlackBoard interface listener.
sigc::signal< void, Interface *, Message * > signal_message_received()
Get "message received" signal.
void set_message_enqueueing(bool enqueue)
Set if received messages should be enqueued or not.
sigc::signal< void, Interface * > signal_data_changed()
Get "data changed" signal.
void bbil_add_data_interface(Interface *interface)
Add an interface to the data modification watch list.