1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
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 //
9 #ifndef anna_comm_Service_hpp
10 #define anna_comm_Service_hpp
12 #include <anna/comm/Delivery.hpp>
22 Clase que modela un servicio de reparto de carga. Cada servicio de reparto de carga esta asociado
23 a un nmero indeterminado de procesos servidores (ver Server) entre los que puede seleccionar a
24 la hora de enviar una peticin.
26 Para crear un nuevo servicio hay que invocar a Communicator::createService.
28 class Service : public Delivery {
32 \param name Nombre lógico del servicio de reparto de carga.
33 \param isCritical Indica las caracteristicas del reparto de carga. Debe valor \em true si el
34 reparto de carga a crear es crítico o \em false en otro caso.
36 Service(const char* name, const bool isCritical) :
38 a_isCritical(isCritical) {}
41 Devuelve la caracteristica de criticidad de este reparto.
43 @return La caracteristica de criticidad de este reparto.
45 bool isCritical() const throw() { return a_isCritical; }
48 Conecta el servidor recibido como parámetro con este reparto.
49 \param server Instancia del servidor que vamos a registrar en este reparto.
51 void attach(Server* server) throw(RuntimeException);
54 Envía el mensaje recibido como parámetro. El bloque de datos recibido se codifica segun las
55 reglas establecidas por el protocolo asociado en el contructor.
57 \param message Mensaje que vamos codificar para enviar a la capa de transporte.
58 @return Servidor usado en el envio
60 comm::Server* send(Message& message) throw(RuntimeException);
63 Envía el mensaje recibido como parámetro. El bloque de datos recibido se codifica segun las
64 reglas establecidas por el protocolo asociado en el contructor.
66 \param message Mensaje que vamos codificar para enviar a la capa de transporte.
67 @return Servidor usado en el envio
69 comm::Server* send(Message* message) throw(RuntimeException);
72 Envía el mensaje recibido como parámetro a todos los servidores incluidos en el servicio de reparto de carga
73 recibido como parámetro. El bloque de datos recibido se codifica segun las reglas establecidas
74 por el protocolo asociado.
76 \param message Mensaje que vamos a enviar al todos los procesos que componente el servicio.
78 @return Numero de servidores a los que ha enviado el mensaje.
80 int broadcast(Message& message) throw();
83 Envía el mensaje recibido como parámetro a todos los servidores incluidos en el servicio de reparto de carga
84 recibido como parámetro. El bloque de datos recibido se codifica segun las reglas establecidas
85 por el protocolo asociado.
87 \param message Mensaje que vamos a enviar al todos los procesos que componente el servicio.
89 @return Numero de servidores a los que ha enviado el mensaje.
91 int broadcast(Message* message) throw();
94 Devuelve una cadena con la información referente a esta maquina.
95 @return Una cadena con la información referente a esta maquina.
97 std::string asString() const throw();
100 Devuelve un nodo XML con la información referente a este objeto.
101 \param parent Nodo XML a partir del cual introducir la información.
102 \return Un nodo XML con la información referente a este objeto.
104 xml::Node* asXML(xml::Node* parent) const throw();
107 Devuelve el recurso remoto apuntado por el iterador recibido como parámetro.
108 \param ii Iterador usado para recorrer los recursos asociados a este reparto.
109 \return El recurso remoto apuntado por el iterador recibido como parámetro.
111 static Server* server(iterator& ii) throw();
114 Devuelve el recurso remoto apuntado por el iterador recibido como parámetro.
115 \param ii Iterador usado para recorrer los recursos asociados a este reparto.
116 \return El recurso remoto apuntado por el iterador recibido como parámetro.
118 static const Server* server(const_iterator& ii) throw();
121 const bool a_isCritical;