bug in RC
[anna.git] / include / anna / comm / ServerAllocator.hpp
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_ServerAllocator_hpp
10 #define anna_comm_ServerAllocator_hpp
11
12 #include <string>
13
14 namespace anna {
15
16 namespace comm {
17
18 class Host;
19 class TransportFactory;
20 class Server;
21
22 /**
23    Instanciador de anna::comm::Server se usa para poder instanciar distintos tipos
24    de anna::comm::Server desde la clase anna::comm::Host.
25
26    \see Host::createServer
27    \see Server
28 */
29 class ServerAllocator {
30 public:
31   /**
32      Constructor. Recoge los parametros con los que crear el servidor.
33      \param name Nombre logico del servidor.
34      \param host Instancia de la maquina sobre la que esta atendiento peticiones.
35      \param remotePort Puerto sobre el que atiende peticiones.
36      \param autoRecovery Indica si en caso de caida se debe intentar la recuperacion
37      automatica de la conexion.
38      \param transportFactory Factoria de protocolos de transporte usada por los ClientSocket asociados a este
39      proceso servidor.
40      \param ignoreIncomingMessages Indicador de ignorar mensajes entrantes.
41   */
42   ServerAllocator(const std::string& name, const Host& host, const int remotePort, const bool autoRecovery, TransportFactory* transportFactory = NULL, const bool ignoreIncomingMessages = false) :
43     a_name(name),
44     a_host(host),
45     a_remotePort(remotePort),
46     a_autoRecovery(autoRecovery),
47     a_transportFactory(transportFactory),
48     a_ignoreIncomingMessages(ignoreIncomingMessages)
49   {;}
50
51   /**
52      Constructor copia.
53      \param other Instanciador del que copiar.
54   */
55   ServerAllocator(const ServerAllocator& other) :
56     a_name(other.a_name),
57     a_host(other.a_host),
58     a_remotePort(other.a_remotePort),
59     a_autoRecovery(other.a_autoRecovery),
60     a_transportFactory(other.a_transportFactory),
61     a_ignoreIncomingMessages(other.a_ignoreIncomingMessages)
62   {;}
63
64   /**
65    * Destructor
66    */
67   virtual ~ServerAllocator() {;}
68
69   /**
70      Devuelve el nombre logico del servidor.
71      \return el nombre logico del servidor.
72   */
73   const std::string& getName() const throw() { return a_name; }
74
75   /**
76      Devuelve el puerto sobre el que atiende peticiones.
77      \return el puerto sobre el que atiende peticiones.
78   */
79   int getRemotePort() const throw() { return a_remotePort; }
80
81   /**
82      Indica si se ha indicado que en caso de caida se debe intentar la recuperacion
83      automatica de la conexion.
84      \return \em true si se ha indicado que en caso de caida se debe intentar la recuperacion
85      automatica de la conexion o \em false en caso contrario.
86   */
87   bool autoRecovery() const throw() { return a_autoRecovery; }
88
89   /**
90    * Devuelve \em true si el indicador que ignora los mensajes entrantes está activo, o \em false en otro caso.
91    * \return \em true si el indicador que ignora los mensajes entrantes está activo, o \em false en otro caso.
92    */
93   bool getIgnoreIncomingMessages() const throw() { return a_ignoreIncomingMessages; }
94
95   /**
96      Crea una instancia particular de anna::comm::Server usando los parametros establecidos
97      en el constructor.
98      \return una instancia particular de anna::comm::Server.
99   */
100   virtual Server* apply() const throw();
101
102 protected:
103   const std::string a_name;
104   const Host& a_host;
105   const int a_remotePort;
106   bool a_autoRecovery;
107   TransportFactory* a_transportFactory;
108   const bool a_ignoreIncomingMessages;
109 };
110
111 }
112
113 }
114
115 #endif