bug in RC
[anna.git] / include / anna / comm / RoundRobinDelivery.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_RoundRobinDelivery_hpp
10 #define anna_comm_RoundRobinDelivery_hpp
11
12 #include <anna/comm/Service.hpp>
13
14 namespace anna {
15
16 namespace comm {
17 class Resource;
18 }
19
20 namespace comm {
21
22 /**
23    Servicio de reparto de carga mediante un algoritmo RoundRobin, es decir, cada uno de los mensajes enviados tiene como
24    destino uno de los recursos definidos, cuando en el mensaje i-esimo se alcance el final de la lista de recursos
25    disponibles se vuelve a empezar por el primero.
26 */
27 class RoundRobinDelivery : public comm::Service {
28 public:
29   /**
30      Constructor.
31      \param name Nombre logico del servicio de reparto de carga.
32      \param isCritical Indica las caracteristicas del reparto de carga. Debe valor \em true si el
33      reparto de carga a crear es critico o \em false en otro caso.
34   */
35   RoundRobinDelivery(const char* name, const bool isCritical) :
36     comm::Service(name, isCritical),
37     a_iiserver(0)
38   {;}
39
40   std::string asString() const throw();
41
42   xml::Node* asXML(xml::Node* parent) const throw();
43
44   /**
45      Metodo que devuelve el nombre completo de este selector de recursos.
46      Para evitar ambiguedades este nombre incluye la lista completa de \em namespaces
47      a los que pertenece la clase.
48      \return Una cadena con el nombre de este selector.
49   */
50   static const char* className() throw() { return "anna::comm::RoundRobinDelivery"; }
51
52 protected:
53   void do_initialize() throw(RuntimeException);
54
55 private:
56   //------------------------------------------------------------------------------------
57   // - a_iiserver: iterador que apunta al servidor que debemos usar.
58   //------------------------------------------------------------------------------------
59   iterator a_iiserver;
60
61   comm::Resource* do_apply() throw(RuntimeException);
62   iterator advance() throw();
63 };
64
65 }
66 }
67
68 #endif
69