X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/c0e0cf58ce033421d125afb813636f102456592c..31a4d1fea320e59487fa28bbb406ee50d4e7ec76:/Server/include/plaqui/server/plant.h diff --git a/Server/include/plaqui/server/plant.h b/Server/include/plaqui/server/plant.h index 89ee76f..1430b09 100644 --- a/Server/include/plaqui/server/plant.h +++ b/Server/include/plaqui/server/plant.h @@ -40,7 +40,15 @@ namespace Server { /// Planta Química. class Plant: public Runnable { + ///////////////////////////////////////////////////////////////////// + // Constantes. + private: + + /// Tiempo por defecto a esperar entre iteraciones de la simulación. + static const unsigned DEFAULT_WAIT_TIME = 100000u; + + ///////////////////////////////////////////////////////////////////// // Tipos. private: @@ -48,7 +56,7 @@ namespace Server { /// Lista de conexiones de control. typedef std::list TransmitterList; - + ///////////////////////////////////////////////////////////////////// // Atributos. private: @@ -68,7 +76,19 @@ namespace Server { /// Nombre del archivo donde esta el XML de la planta. std::string filename; + /// Tiempo que espera entre cada iteración de la simulación. + unsigned wait_time; + + /// Mutex para el tiempo de espera. + Glib::Mutex wait_time_mutex; + /// Indica si la planta está pausada o simulando. + bool paused; + + /// Mutex para el indicador de pausa. + Glib::Mutex paused_mutex; + + ///////////////////////////////////////////////////////////////////// // Métodos. protected: @@ -76,7 +96,7 @@ namespace Server { /** * Corre la planta (la monitorea o la simula). */ - virtual void real_run(void); + virtual void real_run(void) throw(); public: @@ -88,7 +108,6 @@ namespace Server { /** * Constructor desde un archivo. * - * \param name Nombre de la planta. * \param filename Nombre del archivo de donde obtener la planta. */ Plant(const std::string& filename); @@ -108,6 +127,13 @@ namespace Server { bool transmission_stop(const string& host, const Connection::Port& port); + /** + * Borra una transmisión de la lista de transmisiones al finalizar. + * + * \param transmission Transmisión a eliminar. + */ + void on_transmission_finished(Transmitter* transmission); + /** * Abre (o cierra) un elemento de la planta. * @@ -122,6 +148,22 @@ namespace Server { */ bool set_open(const std::string& element, bool open = true); + /** + * Setea la frecuencia de refresco de la simulación. + * Si se setea a cero, se usa el tiempo por omisión. + * + * \param hz Cantidad de veces por segundo que debe refrescarse la + * simulación. + */ + void set_frequency(unsigned hz = 0u); + + /** + * Pausa (o reanuda) la simulación. + * + * \param paused true si se la quiere pausar, false para reanudar. + */ + void set_paused(bool paused = true); + /** * Obtiene el XML de la planta. */