Remove dynamic exceptions
[anna.git] / include / anna / http / MessageFactory.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_http_MessageFactory_hpp
10 #define anna_http_MessageFactory_hpp
11
12 #include <anna/core/Singleton.hpp>
13 #include <anna/core/util/Recycler.hpp>
14
15 #include <anna/http/Request.hpp>
16 #include <anna/http/Response.hpp>
17
18 namespace anna {
19
20 namespace http {
21
22 /**
23    Factoria de mensajes HTTP.
24 */
25 class MessageFactory : public Singleton <MessageFactory> {
26 public:
27   /**
28      Crea un mensaje HTTP del tipo correspondiente al recibido como parametro.
29      \param type Tipo de mensaje HTTP que deseamos crear.
30      \return Una nueva instancia de mensaje HTTP.
31      \warning Cada una de las instancias recibidas con este metodo debe ser liberada con #release.
32   */
33   Message* create(const Message::Type::_v type) noexcept(false);
34
35   /**
36      Libera los recursos del mensaje HTTP recibido como parametro.
37      \param message Mensaje HTTP a liberar.
38      \warning Si el mensaje recibido no fue obtenido mediante #create los resultado obtenidos no
39      estan documentados.
40   */
41   void release(Message* message) ;
42
43 private:
44   Recycler <Request> a_requests;
45   Recycler <Response> a_responses;
46
47   MessageFactory() {;}
48
49   friend class Singleton<MessageFactory>;
50 };
51
52
53 }
54 }
55
56 #endif