Fawkes API Fawkes Development Version
connection_dispatcher.h
1
2/***************************************************************************
3 * connection_dispatcher.h - Network connection listener and dispatcher
4 *
5 * Created: Mon Oct 20 15:02:47 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_CONNECTION_DISPATCHER_H_
25#define _LIBS_GUI_UTILS_CONNECTION_DISPATCHER_H_
26
27#include <core/utils/lock_queue.h>
28#include <glibmm/dispatcher.h>
29#include <netcomm/fawkes/client_handler.h>
30#include <netcomm/fawkes/component_ids.h>
31
32#include <cstddef>
33
34namespace fawkes {
35class FawkesNetworkClient;
36class FawkesNetworkMessage;
37
39{
40public:
41 ConnectionDispatcher(unsigned int cid = FAWKES_CID_OBSERVER_MODE);
42 ConnectionDispatcher(const char * hostname,
43 unsigned short int port,
44 unsigned int cid = FAWKES_CID_OBSERVER_MODE);
45 virtual ~ConnectionDispatcher();
46
47 void set_cid(unsigned int cid);
48 void set_client(FawkesNetworkClient *client);
50
51 sigc::signal<void> signal_connected();
52 sigc::signal<void> signal_disconnected();
53 sigc::signal<void, FawkesNetworkMessage *> signal_message_received();
54
55 virtual void deregistered(unsigned int id) noexcept;
56 virtual void inbound_received(FawkesNetworkMessage *m, unsigned int id) noexcept;
57 virtual void connection_died(unsigned int id) noexcept;
58 virtual void connection_established(unsigned int id) noexcept;
59
60 operator bool();
61
62protected:
63 virtual void on_connection_established();
64 virtual void on_connection_died();
65 virtual void on_message_received();
66
67private:
68 void connect_signals();
69
70private:
71 unsigned int cid_;
72 FawkesNetworkClient *client_;
73 bool client_owned_;
74
75 Glib::Dispatcher dispatcher_connected_;
76 Glib::Dispatcher dispatcher_disconnected_;
77 Glib::Dispatcher dispatcher_message_received_;
78
79 sigc::signal<void> signal_connected_;
80 sigc::signal<void> signal_disconnected_;
81 sigc::signal<void, FawkesNetworkMessage *> signal_message_received_;
82
83 LockQueue<FawkesNetworkMessage *> queue_message_received_;
84};
85
86} // namespace fawkes
87
88#endif
Watches network client events and dispatches them as signals.
virtual void on_connection_died()
Internal event handler.
void set_client(FawkesNetworkClient *client)
Set Fawkes network client.
ConnectionDispatcher(unsigned int cid=FAWKES_CID_OBSERVER_MODE)
Constructor.
virtual void connection_established(unsigned int id) noexcept
Client has established a connection.
void set_cid(unsigned int cid)
Set component ID.
virtual ~ConnectionDispatcher()
Destructor.
sigc::signal< void > signal_connected()
Get "connected" signal.
FawkesNetworkClient * get_client()
Get client.
virtual void on_message_received()
Internal event handler.
sigc::signal< void, FawkesNetworkMessage * > signal_message_received()
Get "message received" signal.
virtual void deregistered(unsigned int id) noexcept
This handler has been deregistered.
virtual void inbound_received(FawkesNetworkMessage *m, unsigned int id) noexcept
Called for incoming messages.
sigc::signal< void > signal_disconnected()
Get "disconnected" signal.
virtual void on_connection_established()
Internal event handler.
virtual void connection_died(unsigned int id) noexcept
Client connection died.
Message handler for FawkesNetworkClient.
Simple Fawkes network client.
Definition: client.h:52
Representation of a message that is sent over the network.
Definition: message.h:77
Fawkes library namespace.