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_timex_TimeEvent_hpp
10 #define anna_timex_TimeEvent_hpp
12 #include <anna/core/RuntimeException.hpp>
13 #include <anna/config/defines.hpp>
14 #include <anna/core/util/Millisecond.hpp>
21 class TimeEventObserver;
24 Clase base de los eventos de los eventos de tiempo.
29 Sinonimo usado para el identificador de eventos de tiempo.
31 Se define como un ptrnumber para facilitar la construccion de instancias sin tener que indicar
32 un Id en particular, ya que se usara su direccion de memoria como identificador.
34 typedef anna::ptrnumber Id;
38 Si un evento de tiempo esta activo y se invoca a su destructor se invocaria automaticamente a
39 Engine::cancel para terminar con la ejecucin de este evento.
44 Devuelve el identificador de este evento.
45 \return El identificador de este evento.
47 Id getId() const throw() { return a_id; }
50 Devuelve la duracion maxima a este evento indicada en milisegundos.
51 @return La duracion maxima de este evento indicada en milisegundos.
53 const Millisecond & getTimeout() const throw() { return a_timeout; }
56 Devuelve la instancia del objeto encargado de gestionar el espacio asociado a
57 esta instancia. Puede ser NULL.
58 \return La instancia del objeto encargado de gestionar el espacio asociado a
61 const TimeEventObserver* getObserver() const throw() { return a_observer; }
64 Establece el identificador de este evento de tiempo.
65 \param id El identificador de evento para esta instancia.
67 \warning Exclusivamente uso interno.
69 void setId(const Id id) throw() { a_id = id; }
72 Establece la duracion de este evento indicada en milisegundos.
73 \param timeout Establece la duracion de este evento.
75 void setTimeout(const Millisecond & timeout) throw() { a_timeout = timeout; }
78 Establece la instancia de objeto encargado de gestionar el espacio asociado a esta
79 instancia. Si no es NULL sera invocado cuando el timex::Engine caduque o
80 cancele este evento temporal.
82 \param observer Instancia del objeto encargada de gestional el espacio asignado a esta
85 void setObserver(TimeEventObserver* observer) throw() { a_observer = observer; }
88 Devuelve el estado de activacin de este evento de tiempo.
89 @return \em false si el evento esta activado o \em false en otro caso.
91 bool isActive() const throw() { return (a_controller != NULL); }
94 Devuelve una cadena con la informacion sobre este evento.
95 \return Una cadena con la informacion sobre este evento.
97 virtual std::string asString() const throw();
113 @param id Identificador de este evento.
114 @param timeout La duracion de este evento indicada en milisegundos.
116 TimeEvent(const Id id, const Millisecond & timeout) :
123 metodo que debemos re-escribir para particularizar el comportamiento de nuestra clase cuando
124 el Engine notifica que se ha sobrepasado la duracion maxima del evento si que se invoque
125 a ninguno de los metodos que lo cancelarian. Una vez invocado a este metodo el evento se considera
126 cancelado y todos sus recursos son liberados automaticamente por Engine.
128 @param timeController Controlador de tiempo asociado al evento que esta expirando.
130 virtual void expire(Engine* timeController) throw(RuntimeException) = 0;
133 metodo que debemos re-escribir para particularizar el comportamiento de nuestra clase cuando
134 el Engine notifica que se ha parado el sistema de control de tiempos. Una vez invocado a este
135 metodo el evento se considera cancelado y todos sus recursos son liberados automaticamente
138 Las acciones realizadas nunca deber�n generar nuevos eventos. Por defecto no hace nada.
140 virtual void stop() throw(RuntimeException) {;}
144 Millisecond a_timeout;
145 Engine* a_controller;
146 TimeEventObserver* a_observer;