ANNA Suite  2020b
Multipurpose development suite for Telco applications
Network.hpp
Go to the documentation of this file.
1 // ANNA - Anna is Not Nothingness Anymore //
2 // //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
4 // //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7 
8 
9 #ifndef anna_comm_Network_hpp
10 #define anna_comm_Network_hpp
11 
12 #include <netinet/in.h>
13 
14 #include <vector>
15 
16 #include <anna/core/Singleton.hpp>
17 
19 
20 namespace anna {
21 
22 namespace xml {
23 class Node;
24 }
25 
26 namespace comm {
27 
28 class Host;
29 class Device;
30 class Server;
31 class TransportFactory;
32 class ReceiverFactory;
33 
37 class Network : public Singleton <Network> {
38 public:
45  struct Port { enum _v { Unique, Multiple }; };
46  struct DoConnect { enum _v { Yes, No }; };
47 
48 
49  typedef std::vector <Host*> host_container;
50  typedef host_container::iterator host_iterator;
51  typedef host_container::const_iterator const_host_iterator;
53  typedef std::vector <Device*> device_container;
54  typedef device_container::iterator device_iterator;
55  typedef device_container::const_iterator const_device_iterator;
65  Device* find(const in_addr_t& address) ;
66 
71  const_device_iterator device_begin() const { return a_devices.begin(); }
72 
77  const_device_iterator device_end() const { return a_devices.end(); }
78 
86  static const Device* device(const_device_iterator ii) { return *ii; }
87 
92  device_iterator device_begin() { return a_devices.begin(); }
93 
98  device_iterator device_end() { return a_devices.end(); }
99 
107  static Device* device(device_iterator ii) { return *ii; }
108 
118  Host* find_host(const char* name) ;
119 
129  Host* find_host(const std::string& name) { return find_host(name.c_str()); }
130 
146  Host* resolve(const char* hostname) noexcept(false);
147 
163  Host* resolve(const std::string& hostname) noexcept(false) { return resolve(hostname.c_str()); }
164 
169  const_host_iterator host_begin() const { return a_hosts.begin(); }
170 
175  const_host_iterator host_end() const { return a_hosts.end(); }
176 
184  static const Host* host(const_host_iterator ii) { return *ii; }
185 
190  host_iterator host_begin() { return a_hosts.begin(); }
191 
196  host_iterator host_end() { return a_hosts.end(); }
197 
205  static Host* host(host_iterator ii) { return *ii; }
206 
222  Server* createServer(const char* ip, const int remotePort, const bool autoRecovery, TransportFactory* transportFactory = NULL, const Port::_v mode = Port::Multiple, const DoConnect::_v doConnect = DoConnect::Yes)
223  noexcept(false);
224 
241  Server* createServer(const char* ip, const int remotePort, const bool autoRecovery, ReceiverFactory& receiverFactory, TransportFactory* transportFactory = NULL, const Port::_v mode = Port::Multiple, const DoConnect::_v doConnect = DoConnect::Yes)
242  noexcept(false);
243 
244 // /**
245 // Devuelve la instancia del anna::comm::Server asociado a la IP y puerto recibidos.
246 //
247 // \param ip Direccion IP en la que escucha el proceso con el que queremos conectar.
248 // \param remotePort Puerto remoto en el que atiendo peticiones el proceso con el que conectar.
249 //
250 // \return La instancia de comm::Server asociado al IP y puerto recibido.
251 // \warning El anna::comm::Server devuelto puede ser NULL.
252 // */
253 // Server* findServer (const char* ip, const int remotePort) noexcept(false);
254 
271  Server* resolveServer(const char* hostname, const int remotePort, const bool autoRecovery, TransportFactory* transportFactory = NULL, const Port::_v mode = Port::Multiple, const DoConnect::_v doConnect = DoConnect::Yes)
272  noexcept(false);
273 
291  Server* resolveServer(const char* hostname, const int remotePort, const bool autoRecovery, ReceiverFactory& receiverFactory, TransportFactory* transportFactory = NULL, const Port::_v mode = Port::Multiple, const DoConnect::_v doConnect = DoConnect::Yes)
292  noexcept(false);
293 
294 
301  INetAddress getINetAddress(const char* ip, const int port) noexcept(false);
302 
309  INetAddress getINetAddress(const std::string& ip, const int port) noexcept(false);
310 
311 
317  xml::Node* asXML(xml::Node* parent) const ;
318 
319 private:
320  host_container a_hosts;
321  device_container a_devices;
322  Host* a_cacheHost;
323  Device* a_cacheDevice;
324 
325  Network() : a_cacheHost(NULL), a_cacheDevice(NULL) {;}
326  Network(const Network&);
327 
328  friend class Singleton<Network>;
329 };
330 
331 }
332 }
333 
334 #endif
335 
Definition: INetAddress.hpp:34
host_container::iterator host_iterator
Definition: Network.hpp:50
std::vector< Host * > host_container
Definition: Network.hpp:49
_v
Definition: Network.hpp:45
static Device * device(device_iterator ii)
Definition: Network.hpp:107
Definition: Network.hpp:46
Definition: Server.hpp:53
_v
Definition: Network.hpp:46
const_host_iterator host_end() const
Definition: Network.hpp:175
Definition: Node.hpp:56
static const Device * device(const_device_iterator ii)
Definition: Network.hpp:86
Definition: Singleton.hpp:76
Definition: Device.hpp:37
device_container::iterator device_iterator
Definition: Network.hpp:54
Host * resolve(const std::string &hostname) noexcept(false)
Definition: Network.hpp:163
host_iterator host_begin()
Definition: Network.hpp:190
Definition: Host.hpp:46
Definition: Network.hpp:37
const_device_iterator device_begin() const
Definition: Network.hpp:71
device_iterator device_end()
Definition: Network.hpp:98
Definition: Network.hpp:46
device_container::const_iterator const_device_iterator
Definition: Network.hpp:55
Definition: Network.hpp:45
device_iterator device_begin()
Definition: Network.hpp:92
std::vector< Device * > device_container
Definition: Network.hpp:53
const_host_iterator host_begin() const
Definition: Network.hpp:169
static Host * host(host_iterator ii)
Definition: Network.hpp:205
xml::Node Node
Definition: Node.hpp:21
Definition: ReceiverFactory.hpp:53
Host * find_host(const std::string &name)
Definition: Network.hpp:129
Definition: app.hpp:12
static const Host * host(const_host_iterator ii)
Definition: Network.hpp:184
Definition: Network.hpp:45
Definition: TransportFactory.hpp:30
host_container::const_iterator const_host_iterator
Definition: Network.hpp:51
const_device_iterator device_end() const
Definition: Network.hpp:77
host_iterator host_end()
Definition: Network.hpp:196