Fawkes API Fawkes Development Version
interface_dispatcher.h
1
2/***************************************************************************
3 * interface_dispatcher.cpp - BlackBoard listener and dispatcher
4 *
5 * Created: Thu Oct 09 23:04:59 2008
6 * Copyright 2008 Tim Niemueller [www.niemueller.de]
7 *
8 ****************************************************************************/
9
10/* This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version. A runtime exception applies to
14 * this software (see LICENSE.GPL_WRE file mentioned below for details).
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Library General Public License for more details.
20 *
21 * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22 */
23
24#ifndef _LIBS_GUI_UTILS_INTERFACE_DISPATCHER_H_
25#define _LIBS_GUI_UTILS_INTERFACE_DISPATCHER_H_
26
27#include <blackboard/interface_listener.h>
28#include <core/utils/lock_queue.h>
29#include <glibmm/dispatcher.h>
30
31#include <cstddef>
32
33namespace fawkes {
34class Interface;
35
37{
38public:
39 InterfaceDispatcher(const char * listener_name,
40 fawkes::Interface *iface,
41 bool message_enqueueing = true);
42
43 InterfaceDispatcher(const char * listener_name_prefix,
44 std::list<fawkes::Interface *> ifaces,
45 bool message_enqueueing = true);
46
47 void set_message_enqueueing(bool enqueue);
48
49 sigc::signal<void, Interface *> signal_data_changed();
50 sigc::signal<void, Interface *, Message *> signal_message_received();
51 sigc::signal<void, Interface *> signal_writer_added();
52 sigc::signal<void, Interface *> signal_writer_removed();
53 sigc::signal<void, Interface *> signal_reader_added();
54 sigc::signal<void, Interface *> signal_reader_removed();
55
56 virtual void bb_interface_data_refreshed(Interface *interface) noexcept;
57 virtual bool bb_interface_message_received(Interface *interface, Message *message) noexcept;
58 virtual void bb_interface_writer_added(Interface *interface, Uuid instance_serial) noexcept;
59 virtual void bb_interface_writer_removed(Interface *interface, Uuid instance_serial) noexcept;
60 virtual void bb_interface_reader_added(Interface *interface, Uuid instance_serial) noexcept;
61 virtual void bb_interface_reader_removed(Interface *interface, Uuid instance_serial) noexcept;
62
63protected:
64 virtual void on_data_changed();
65 virtual void on_message_received();
66 virtual void on_writer_added();
67 virtual void on_writer_removed();
68 virtual void on_reader_added();
69 virtual void on_reader_removed();
70
71private:
72 void setup_signals();
73
74private:
75 bool message_enqueueing_;
76
77 Glib::Dispatcher dispatcher_data_changed_;
78 Glib::Dispatcher dispatcher_message_received_;
79 Glib::Dispatcher dispatcher_writer_added_;
80 Glib::Dispatcher dispatcher_writer_removed_;
81 Glib::Dispatcher dispatcher_reader_added_;
82 Glib::Dispatcher dispatcher_reader_removed_;
83
84 sigc::signal<void, Interface *> signal_data_changed_;
85 sigc::signal<void, Interface *, Message *> signal_message_received_;
86 sigc::signal<void, Interface *> signal_writer_added_;
87 sigc::signal<void, Interface *> signal_writer_removed_;
88 sigc::signal<void, Interface *> signal_reader_added_;
89 sigc::signal<void, Interface *> signal_reader_removed_;
90
91 LockQueue<Interface *> queue_data_changed_;
92 LockQueue<std::pair<Interface *, Message *>> queue_message_received_;
93 LockQueue<Interface *> queue_writer_added_;
94 LockQueue<Interface *> queue_writer_removed_;
95 LockQueue<Interface *> queue_reader_added_;
96 LockQueue<Interface *> queue_reader_removed_;
97};
98
99} // namespace fawkes
100
101#endif
BlackBoard interface listener.
Interface listener with dispatcher.
sigc::signal< void, Interface *, Message * > signal_message_received()
Get "message received" signal.
sigc::signal< void, Interface * > signal_reader_added()
Get "reader added" signal.
sigc::signal< void, Interface * > signal_reader_removed()
Get "reader removed" signal.
virtual void bb_interface_reader_added(Interface *interface, Uuid instance_serial) noexcept
A reading instance has been opened for a watched interface.
virtual void on_writer_added()
Internal event handler.
void set_message_enqueueing(bool enqueue)
Set if received messages should be enqueued or not.
sigc::signal< void, Interface * > signal_writer_added()
Get "writer added" signal.
virtual void on_data_changed()
Internal event handler.
virtual bool bb_interface_message_received(Interface *interface, Message *message) noexcept
BlackBoard message received notification.
virtual void on_reader_added()
Internal event handler.
virtual void bb_interface_reader_removed(Interface *interface, Uuid instance_serial) noexcept
A reading instance has been closed for a watched interface.
virtual void bb_interface_data_refreshed(Interface *interface) noexcept
BlackBoard data refreshed notification.
virtual void bb_interface_writer_added(Interface *interface, Uuid instance_serial) noexcept
A writing instance has been opened for a watched interface.
virtual void bb_interface_writer_removed(Interface *interface, Uuid instance_serial) noexcept
A writing instance has been closed for a watched interface.
sigc::signal< void, Interface * > signal_writer_removed()
Get "writer removed" signal.
virtual void on_message_received()
Internal event handler.
sigc::signal< void, Interface * > signal_data_changed()
Get "data changed" signal.
virtual void on_writer_removed()
Internal event handler.
virtual void on_reader_removed()
Internal event handler.
InterfaceDispatcher(const char *listener_name, fawkes::Interface *iface, bool message_enqueueing=true)
Constructor.
Base class for all Fawkes BlackBoard interfaces.
Definition: interface.h:80
Queue with a lock.
Definition: lock_queue.h:45
Base class for all messages passed through interfaces in Fawkes BlackBoard.
Definition: message.h:44
A convenience class for universally unique identifiers (UUIDs).
Definition: uuid.h:29
Fawkes library namespace.