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()) {
92 InterfaceDispatcher::setup_signals()
95 dispatcher_message_received_.connect(
112 message_enqueueing_ = enqueue;
121 queue_data_changed_.lock();
122 while (!queue_data_changed_.empty()) {
123 Interface *iface = queue_data_changed_.front();
124 signal_data_changed_.emit(iface);
125 queue_data_changed_.pop();
127 queue_data_changed_.unlock();
136 queue_message_received_.lock();
137 while (!queue_message_received_.empty()) {
138 std::pair<Interface *, Message *> p = queue_message_received_.front();
139 signal_message_received_.emit(p.first, p.second);
141 queue_message_received_.pop();
143 queue_message_received_.unlock();
152 queue_writer_added_.lock();
153 while (!queue_writer_added_.empty()) {
154 Interface *iface = queue_writer_added_.front();
155 signal_writer_added_.emit(iface);
156 queue_writer_added_.pop();
158 queue_writer_added_.unlock();
167 queue_writer_removed_.lock();
168 while (!queue_writer_removed_.empty()) {
169 Interface *iface = queue_writer_removed_.front();
170 signal_writer_removed_.emit(iface);
171 queue_writer_removed_.pop();
173 queue_writer_removed_.unlock();
182 queue_reader_added_.lock();
183 while (!queue_reader_added_.empty()) {
184 Interface *iface = queue_reader_added_.front();
185 signal_reader_added_.emit(iface);
186 queue_reader_added_.pop();
188 queue_reader_added_.unlock();
197 queue_reader_removed_.lock();
198 while (!queue_reader_removed_.empty()) {
199 Interface *iface = queue_reader_removed_.front();
200 signal_reader_removed_.emit(iface);
201 queue_reader_removed_.pop();
203 queue_reader_removed_.unlock();
209 queue_data_changed_.push_locked(interface);
210 dispatcher_data_changed_();
217 queue_message_received_.push_locked(std::make_pair(interface, message));
218 dispatcher_message_received_();
219 return message_enqueueing_;
224 unsigned int instance_serial)
throw()
226 queue_writer_added_.push_locked(interface);
227 dispatcher_writer_added_();
232 unsigned int instance_serial)
throw()
234 queue_writer_removed_.push_locked(interface);
235 dispatcher_writer_removed_();
240 unsigned int instance_serial)
throw()
242 queue_reader_added_.push_locked(interface);
243 dispatcher_reader_added_();
248 unsigned int instance_serial)
throw()
250 queue_reader_removed_.push_locked(interface);
251 dispatcher_reader_removed_();
258 sigc::signal<void, Interface *>
261 return signal_data_changed_;
270 sigc::signal<void, Interface *, Message *>
273 return signal_message_received_;
280 sigc::signal<void, Interface *>
283 return signal_writer_added_;
290 sigc::signal<void, Interface *>
293 return signal_writer_removed_;
300 sigc::signal<void, Interface *>
303 return signal_reader_added_;
310 sigc::signal<void, Interface *>
313 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.