ANNA Suite  2020b
Multipurpose development suite for Telco applications
Host.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_Host_hpp
10 #define anna_comm_Host_hpp
11 
12 #include <algorithm>
13 #include <vector>
14 #include <map>
15 #include <string>
16 
17 #include <anna/core/mt/Mutex.hpp>
19 
20 namespace anna {
21 
22 namespace xml {
23 class Node;
24 }
25 
26 namespace comm {
27 
28 class Communicator;
29 class Server;
30 class TransportFactory;
31 class Device;
32 class Network;
33 class ServerAllocator;
34 
46 class Host : public Mutex {
47 
48  typedef int Port;
49 
50  // Requerido por Forte C++
51 // struct Comparator;
52 // friend struct Comparator;
53 
54 
55  struct SortBy {
56  static int value(const Server* server) ;
57  };
58 
59  std::string a_name;
60 
61 public:
62 
63  typedef std::vector <const Device*> device_container;
64  typedef device_container::const_iterator const_device_iterator;
67 
75  virtual ~Host();
76 
82  const std::string& getName() const { return a_name; }
83 
98  Server* createServer(const char* name, const int remotePort, const bool autoRecovery, TransportFactory* transportFactory = NULL, const bool ignoreIncomingMessages = false, const bool doConnect = true)
99  noexcept(false) {
100  return createServer(std::string(name), remotePort, autoRecovery, transportFactory, ignoreIncomingMessages, doConnect);
101  }
102 
117  Server* createServer(const std::string& name, const int remotePort, const bool autoRecovery, TransportFactory* transportFactory = NULL, const bool ignoreIncomingMessages = false, const bool doConnect = true)
118  noexcept(false);
119 
127  Server* createServer(const ServerAllocator& serverAllocator) noexcept(false);
128 
133  server_iterator server_begin() { return a_servers.begin(); }
134 
139  const_server_iterator server_begin() const { return a_servers.begin(); }
140 
145  server_iterator server_end() { return a_servers.end(); }
146 
151  const_server_iterator server_end() const { return a_servers.end(); }
152 
159  static Server* server(server_iterator ii) { return server_container::data(ii); }
160 
167  static const Server* server(const_server_iterator ii) { return server_container::data(ii); }
168 
169 
174  const_device_iterator device_begin() const { return a_devices.begin(); }
175 
180  const_device_iterator device_end() const { return a_devices.end(); }
181 
188  static const Device* device(const_device_iterator ii) { return *ii; }
189 
201  const Server* find_server(const int remotePort) const ;
202 
214  Server* find_server(const int remotePort) ;
219  void assign(const Device* device) noexcept(false);
220 
229  bool contains(const Device* device) const
230  {
231  const_device_iterator end = device_end();
232  return (std::find(device_begin(), end, device) != end);
233  }
234 
239  std::string asString() const ;
240 
246  xml::Node* asXML(xml::Node* parent) const noexcept(false);
247 
248 
249 protected:
256  Host(const char* name) : a_name(name) {}
257 
258 private:
259  device_container a_devices;
260  server_container a_servers;
261 
262  Server* add(Server*, const int remotePort, const bool doConnect) ;
263 
264  friend class Network;
265 };
266 
267 }
268 }
269 
270 #endif
const_device_iterator device_begin() const
Definition: Host.hpp:174
server_container::const_iterator const_server_iterator
Definition: Host.hpp:69
Definition: Server.hpp:53
Definition: Node.hpp:56
device_container::const_iterator const_device_iterator
Definition: Host.hpp:64
Definition: ServerAllocator.hpp:29
server_container::iterator server_iterator
Definition: Host.hpp:68
Definition: Device.hpp:37
const_device_iterator device_end() const
Definition: Host.hpp:180
Definition: Host.hpp:46
server_iterator server_begin()
Definition: Host.hpp:133
Host(const char *name)
Definition: Host.hpp:256
Definition: Network.hpp:37
static const Device * device(const_device_iterator ii)
Definition: Host.hpp:188
server_iterator server_end()
Definition: Host.hpp:145
static Server * server(server_iterator ii)
Definition: Host.hpp:159
Server * createServer(const char *name, const int remotePort, const bool autoRecovery, TransportFactory *transportFactory=NULL, const bool ignoreIncomingMessages=false, const bool doConnect=true) noexcept(false)
Definition: Host.hpp:98
const_server_iterator server_begin() const
Definition: Host.hpp:139
container::const_iterator const_iterator
Definition: MultiMap.hpp:50
std::vector< const Device * > device_container
Definition: Host.hpp:63
const std::string & getName() const
Definition: Host.hpp:82
xml::Node Node
Definition: Node.hpp:21
Definition: app.hpp:12
bool contains(const Device *device) const
Definition: Host.hpp:229
const_server_iterator server_end() const
Definition: Host.hpp:151
MultiMap< Server, SortBy > server_container
Definition: Host.hpp:66
Definition: Mutex.hpp:41
container::iterator iterator
Definition: MultiMap.hpp:49
Definition: TransportFactory.hpp:30
static const Server * server(const_server_iterator ii)
Definition: Host.hpp:167