interface_dispatcher.h

00001 
00002 /***************************************************************************
00003  *  interface_dispatcher.cpp - BlackBoard listener and dispatcher
00004  *
00005  *  Created: Thu Oct 09 23:04:59 2008
00006  *  Copyright  2008  Tim Niemueller [www.niemueller.de]
00007  *
00008  ****************************************************************************/
00009 
00010 /*  This program is free software; you can redistribute it and/or modify
00011  *  it under the terms of the GNU General Public License as published by
00012  *  the Free Software Foundation; either version 2 of the License, or
00013  *  (at your option) any later version. A runtime exception applies to
00014  *  this software (see LICENSE.GPL_WRE file mentioned below for details).
00015  *
00016  *  This program is distributed in the hope that it will be useful,
00017  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019  *  GNU Library General Public License for more details.
00020  *
00021  *  Read the full text in the LICENSE.GPL_WRE file in the doc directory.
00022  */
00023 
00024 #ifndef __LIBS_GUI_UTILS_INTERFACE_DISPATCHER_H_
00025 #define __LIBS_GUI_UTILS_INTERFACE_DISPATCHER_H_
00026 
00027 #include <cstddef>
00028 #include <glibmm/dispatcher.h>
00029 #include <blackboard/interface_listener.h>
00030 #include <core/utils/lock_queue.h>
00031 
00032 namespace fawkes {
00033 class Interface;
00034 
00035 class InterfaceDispatcher
00036 : public BlackBoardInterfaceListener
00037 {
00038  public:
00039   InterfaceDispatcher(const char *listener_name, fawkes::Interface *iface,
00040                       bool message_enqueueing = true);
00041 
00042   void set_message_enqueueing(bool enqueue);
00043 
00044   sigc::signal<void, Interface *>               signal_data_changed();
00045   sigc::signal<void, Interface *, Message *>    signal_message_received();
00046   sigc::signal<void, Interface *>               signal_writer_added();
00047   sigc::signal<void, Interface *>               signal_writer_removed();
00048   sigc::signal<void, Interface *>               signal_reader_added();
00049   sigc::signal<void, Interface *>               signal_reader_removed();
00050 
00051   virtual void bb_interface_data_changed(Interface *interface) throw();
00052   virtual bool bb_interface_message_received(Interface *interface, Message *message) throw();
00053   virtual void bb_interface_writer_added(Interface *interface,
00054                                          unsigned int instance_serial) throw();
00055   virtual void bb_interface_writer_removed(Interface *interface,
00056                                            unsigned int instance_serial) throw();
00057   virtual void bb_interface_reader_added(Interface *interface,
00058                                          unsigned int instance_serial) throw();
00059   virtual void bb_interface_reader_removed(Interface *interface,
00060                                            unsigned int instance_serial) throw();
00061 
00062  protected:
00063   virtual void on_data_changed();
00064   virtual void on_message_received();
00065   virtual void on_writer_added();
00066   virtual void on_writer_removed();
00067   virtual void on_reader_added();
00068   virtual void on_reader_removed();
00069 
00070 
00071  private:
00072   bool                                           __message_enqueueing;
00073 
00074   Glib::Dispatcher                               __dispatcher_data_changed;
00075   Glib::Dispatcher                               __dispatcher_message_received;
00076   Glib::Dispatcher                               __dispatcher_writer_added;
00077   Glib::Dispatcher                               __dispatcher_writer_removed;
00078   Glib::Dispatcher                               __dispatcher_reader_added;
00079   Glib::Dispatcher                               __dispatcher_reader_removed;
00080 
00081   sigc::signal<void, Interface *>                __signal_data_changed;
00082   sigc::signal<void, Interface *, Message *>     __signal_message_received;
00083   sigc::signal<void, Interface *>                __signal_writer_added;
00084   sigc::signal<void, Interface *>                __signal_writer_removed;
00085   sigc::signal<void, Interface *>                __signal_reader_added;
00086   sigc::signal<void, Interface *>                __signal_reader_removed;
00087 
00088   LockQueue<Interface *>                         __queue_data_changed;
00089   LockQueue<std::pair<Interface *, Message *> >  __queue_message_received;
00090   LockQueue<Interface *>                         __queue_writer_added;
00091   LockQueue<Interface *>                         __queue_writer_removed;
00092   LockQueue<Interface *>                         __queue_reader_added;
00093   LockQueue<Interface *>                         __queue_reader_removed;
00094 };
00095 
00096 }
00097 
00098 #endif

Generated on 1 Mar 2011 for Fawkes API by  doxygen 1.6.1