00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __LIBS_GUI_UTILS_CONNECTION_DISPATCHER_H_
00025 #define __LIBS_GUI_UTILS_CONNECTION_DISPATCHER_H_
00026
00027 #include <glibmm/dispatcher.h>
00028 #include <netcomm/fawkes/client_handler.h>
00029 #include <netcomm/fawkes/component_ids.h>
00030 #include <core/utils/lock_queue.h>
00031
00032 namespace fawkes {
00033 class FawkesNetworkClient;
00034 class FawkesNetworkMessage;
00035
00036 class ConnectionDispatcher
00037 : public FawkesNetworkClientHandler
00038 {
00039 public:
00040 ConnectionDispatcher(unsigned int cid = FAWKES_CID_OBSERVER_MODE);
00041 ConnectionDispatcher(const char *hostname, unsigned short int port,
00042 unsigned int cid = FAWKES_CID_OBSERVER_MODE);
00043 virtual ~ConnectionDispatcher();
00044
00045 void set_cid(unsigned int cid);
00046 void set_client(FawkesNetworkClient *client);
00047 FawkesNetworkClient * get_client();
00048
00049 sigc::signal<void> signal_connected();
00050 sigc::signal<void> signal_disconnected();
00051 sigc::signal<void, FawkesNetworkMessage *> signal_message_received();
00052
00053 virtual void deregistered(unsigned int id) throw();
00054 virtual void inbound_received(FawkesNetworkMessage *m, unsigned int id) throw();
00055 virtual void connection_died(unsigned int id) throw();
00056 virtual void connection_established(unsigned int id) throw();
00057
00058 operator bool();
00059
00060 protected:
00061 virtual void on_connection_established();
00062 virtual void on_connection_died();
00063 virtual void on_message_received();
00064
00065 private:
00066 void connect_signals();
00067
00068 private:
00069 unsigned int __cid;
00070 FawkesNetworkClient *__client;
00071 bool __client_owned;
00072
00073 Glib::Dispatcher __dispatcher_connected;
00074 Glib::Dispatcher __dispatcher_disconnected;
00075 Glib::Dispatcher __dispatcher_message_received;
00076
00077 sigc::signal<void> __signal_connected;
00078 sigc::signal<void> __signal_disconnected;
00079 sigc::signal<void, FawkesNetworkMessage *> __signal_message_received;
00080
00081 LockQueue<FawkesNetworkMessage *> __queue_message_received;
00082 };
00083
00084 }
00085
00086 #endif