1 // ANNA - Anna is Not Nothingness Anymore
3 // (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
5 // http://redmine.teslayout.com/projects/anna-suite
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions
11 // * Redistributions of source code must retain the above copyright
12 // notice, this list of conditions and the following disclaimer.
13 // * Redistributions in binary form must reproduce the above
14 // copyright notice, this list of conditions and the following disclaimer
15 // in the documentation and/or other materials provided with the
17 // * Neither the name of the copyright holder nor the names of its
18 // contributors may be used to endorse or promote products derived from
19 // this software without specific prior written permission.
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 // Authors: eduardo.ramos.testillano@gmail.com
34 // cisco.tierra@gmail.com
37 #ifndef anna_comm_Receiver_hpp
38 #define anna_comm_Receiver_hpp
42 #include <anna/xml/Node.hpp>
43 #include <anna/comm/Server.hpp>
51 class ReceiverFactory;
55 Modela la clase que gestiona el tratamiento de los mensajes de red de forma independiente para
64 * Devuelve el nombre lógico de éste receptor.
65 * \return el nombre lógico de éste receptor.
67 const std::string& getName() const throw() { return a_name; }
70 Metodo manejador de los mensajes recibidos por el socket. En entornos MT cada socket invocara
71 a su Receiver asociado de forma totalmente independiente.
73 \param clientSocket Socket cliente por el que ha llegado el mensaje.
74 \param message Ultimo mensaje recibido. El bloque de datos recibido ya ha sido
75 decodificado aplicando las reglas establecidas por la capa de transporte asociado
76 al ClientSocket por el que llega el mensaje.
78 virtual void apply(ClientSocket& clientSocket, const Message& message) throw(RuntimeException) = 0;
81 * Método manejador de la notificación de que el socket va a ser cerrado.
82 * param clientSocket Socket cliente que va a ser cerrado.
84 virtual void eventBreakConnection(const comm::ClientSocket& clientSocket) throw() {;}
87 * Método manejador de la notificación de que el socket va a ser cerrado.
88 * param clientSocket Socket cliente que va a ser cerrado.
90 virtual void eventBreakLocalConnection(const comm::ClientSocket& clientSocket) throw() {;}
93 * Método manejador de la notificación de que se ha creado una nueva conexion
94 * @param server Proceso servidor con el que hemos establecido la conexion.
96 virtual void eventCreateConnection(const Server* server) throw() {;}
99 Devuelve una cadena con toda la informacion relevante de este objeto.
100 \return una cadena con toda la informacion relevante de este objeto.
102 virtual std::string asString() const
104 std::string msg("anna::comm::Receiver { Name: ");
110 Devuelve un nodo XML con la informacion referente a este objeto.
111 \param parent Nodo XML a partir del cual introducir la informacion.
112 \return Un nodo XML con la informacion referente a este objeto.
114 virtual xml::Node* asXML(xml::Node* parent) const throw(RuntimeException) {
115 xml::Node* node = parent->createChild("comm.Receiver");
116 node->createAttribute("Name", a_name);
123 \param name Nombre logico del receiver.
125 Receiver(const char* name) : a_name(name) { ; }
128 Metodo invocado por el ReceiverFactory en el momento de pasar a usar esta instancia.
130 virtual void initialize() throw(RuntimeException) { ; }
135 friend class ReceiverFactory;
138 * Para poner invocar a #initialize en caso de que se asocie de forma directa el receptor
139 * a un anna::comm::ClientSocket.
141 friend class ClientSocket;