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_Message_hpp
10 #define anna_comm_Message_hpp
12 #include <anna/core/DataBlock.hpp>
24 Clase que modela un mensaje de red basico.
26 class Message : public DataBlock {
39 Devuelve la referencia al cuerpo de este mensaje.
40 \return la referencia al cuerpo de este mensaje.
42 const DataBlock& getBody() const throw() { return *this; }
45 Establece el cuerpo de este mensaje.
46 \param body Bloque de memoria que contiene el mensaje.
47 \return Un puntero a la direccion de este mensaje.
48 \warning Si el contructor activa el sistema de optimizacion de renidmiento el bloque de memoria no se
49 copia, por lo que deberia estar disponible, al menos hasta que invoquemos al metodo Message::code.
51 Message * setBody(const DataBlock& body) throw(RuntimeException) { assign(body); return this; }
54 Establece el cuerpo de este mensaje.
55 \param buffer Bloque de memoria que contiene el mensaje.
56 \param size Numero de bytes que contiene el mensaje.
57 \return Un puntero a la direccion de este mensaje.
58 \warning El bloque de memoria no se copia, por lo que deberia estar disponible, al menos
59 hasta que invoquemos al metodo Message::code.
61 Message * setBody(const char* buffer, const int size) throw(RuntimeException) {
62 DataBlock aux(buffer, size, false);
68 * Establece el cuerpo de este mensaje con el contenido del documento XML correspondiente al
69 * nodo XML recibido como parámetro.
70 * \param node Nodo XML que contiene el documento XML.
72 virtual Message * setBody(const xml::Node* node) throw(RuntimeException);
75 Elimina el contenido del cuerpo de este mensaje.
77 void clearBody() throw() { clear(); }
80 Codifica este mensaje, por defecto no realiza ninguna operacion y retorna
81 el contenido del cuerpo tal y con este.
82 \return El bloque de datos que contiene el mensaje codificado.
84 virtual const DataBlock& code() throw(RuntimeException) { return *this; }
87 struct StatusCodeBuffer { enum _v { None, Reserve, Copy }; };
89 DataBlock* a_codeBuffer;
93 * \param statusCodeBuffer Indica el modo de reservar la memoria adcional que pueden necesitar las clases
94 * heredadas para realizar la codificación del mensaje.
96 explicit Message(const StatusCodeBuffer::_v statusCodeBuffer);
100 * \param codeBuffer Búfer a usar como memoria adicional en caso de que la clase heredada la requiera para
103 explicit Message(DataBlock& codeBuffer);
106 const StatusCodeBuffer::_v a_statusCodeBuffer;
107 xml::Compiler* a_xmlCompiler;
109 Message(const Message&);
110 Message& operator = (const Message&);