X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/a0481d50f6da9cac5efd3502c3657b3fc461ec0d..ea73629e106c1ba77bcd09feac7e22035f28b7d7:/Server/include/plaqui/server/plant.h diff --git a/Server/include/plaqui/server/plant.h b/Server/include/plaqui/server/plant.h index 92f6afd..78dea2f 100644 --- a/Server/include/plaqui/server/plant.h +++ b/Server/include/plaqui/server/plant.h @@ -29,6 +29,8 @@ #define PLAQUI_PLANT_H #include "plaqui/server/runnable.h" +#include "plaqui/server/transmitter.h" +#include "simulator.h" #include namespace PlaQui { @@ -41,18 +43,30 @@ namespace Server { // Tipos. - public: + private: - /// Tipo de señal para indicar que se actualizó la planta. - typedef SigC::Signal0 SignalUpdated; + /// Lista de conexiones de control. + typedef std::list TransmitterList; // Atributos. private: - /// Señal para indicar que se actualizó la planta. - SignalUpdated updated; + /// Transmisiones del estado de las plantas. + TransmitterList transmissions; + + /// Mutex para las transmisiones. + Glib::Mutex transmissions_mutex; + + /// Simulador usado para calcular el estado de la planta. + Model::Simulator simulator; + + /// Mutex para el simulador. + Glib::Mutex simulator_mutex; + + /// Nombre del archivo donde esta el XML de la planta. + std::string filename; // Métodos. @@ -79,9 +93,45 @@ namespace Server { Plant(const std::string& filename); /** - * Obtiene la señal para indicar que se actualizó la planta. + * Comienza una transmisión del estado de la planta. + * + * \return true si comenzó la transmisión, false si hubo problemas. + */ + bool transmission_start(string& host, Connection::Port& port); + + /** + * Comienza una transmisión del estado de la planta. + * + * \return true si detuvo la transmisión, false si no existía. + */ + 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. + */ + bool on_transmission_finished(Transmitter* transmission); + + /** + * Abre (o cierra) un elemento de la planta. + * + * Sólo la bomba y la exclusa pueden ser abiertos y cerrados. + * + * \param element Nombre del elemento a abrir o cerrar. + * \param open true si se quiere abrir el elemento, false si se + * lo quiere cerrar. + * + * \return true si se abrió o cerró el elemento, false si no existía + * o si no era una bomba o exclusa. + */ + bool set_open(const std::string& element, bool open = true); + + /** + * Obtiene el XML de la planta. */ - SignalUpdated& signal_updated(void); + const std::string get_xml(void) const; };