X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/f27c218d18ebf7198e07249aca1eed625da914fd..9523acd2d7be7b8bbbf6d8c786c68c91f9fcc700:/Server/include/plaqui/server/server.h diff --git a/Server/include/plaqui/server/server.h b/Server/include/plaqui/server/server.h index 8c92ca8..b295483 100644 --- a/Server/include/plaqui/server/server.h +++ b/Server/include/plaqui/server/server.h @@ -31,10 +31,11 @@ #include "plaqui/server/tcpserver.h" #include "plaqui/server/controlserver.h" #include "plaqui/server/transmitter.h" +#include "plaqui/server/plant.h" #include "plaqui/server/command.h" #include #include -#include +#include namespace PlaQui { @@ -50,21 +51,18 @@ namespace Server { private: - /// Lista de conexiones de control. - typedef std::list TransmitterList; - - // TODO: - // typedef std::list PlantList; + /// Lista de plantas químicas. + typedef std::map PlantList; // Atributos. private: - /// Transmisiones del estado de las plantas. - TransmitterList transmissions; + // Plantas disponibles en el servidor. + PlantList plants; - // TODO: - // PlantList plants; + /// Mutex para las plantas. + Glib::Mutex plants_mutex; // Métodos. @@ -79,6 +77,56 @@ namespace Server { */ virtual Connection* new_connection(const sockbuf::sockdesc& sd); + /** + * Maneja el comando server/status. + */ + HTTPResponse* cmd_server_status(void) const; + + /** + * Maneja el comando connection/list. + */ + HTTPResponse* cmd_connection_list(void); + + /** + * Maneja el comando connection/stop. + */ + HTTPResponse* cmd_connection_stop(const Command& command); + + /** + * Maneja el comando transmission/list. + */ + HTTPResponse* cmd_transmission_list(void); + + /** + * Maneja el comando transmission/start. + */ + HTTPResponse* cmd_transmission_start(const Command& command); + + /** + * Maneja el comando transmission/stop. + */ + HTTPResponse* cmd_transmission_stop(const Command& command); + + /** + * Maneja el comando plant/list. + */ + HTTPResponse* cmd_plant_list(void); + + /** + * Maneja el comando plant/get. + */ + HTTPResponse* cmd_plant_get(const Command& command); + + /** + * Maneja el comando plant/get. + */ + HTTPResponse* cmd_plant_set(const Command& command); + + /** + * Maneja el comando plant/stop. + */ + HTTPResponse* cmd_plant_stop(const Command& command); + public: /** @@ -91,42 +139,28 @@ namespace Server { * * \param port Puerto en el cual escuchar. */ - Server(int port = 7522); + Server(const std::string& plant_filename, + const Connection::Port& port = 7522); /** - * Comienza la transimisión del estado de una planta. - * - * \param host Host al cual se quiere transmitir. - * \param port Puerto al cual transmitir. - * - * \return true si se pudo empezar a transmitir, false si no. - * - * \todo Ver si es necesario que devuelva algo y si devuelve ver si - * no sería mejor que dé más información (si no se pudo abrir - * o si ya estaba abierto por ejemplo. + * Maneja los comandos recibidos por las conexiones. */ - bool start_transmission(std::string host = "localhost", - int port = 7528); + void on_control_command_received(const Command& command, + ControlServer* controlserver); /** - * Finaliza la transimisión del estado de una planta. - * - * \param host Host al cual se quiere dejar de transmitir. - * \param port Puerto al cual dejar de transmitir. - * - * \return true si se pudo empezar a transmitir, false si no. + * Se encarga de borrar una planta de la lista cuando finaliza. * - * \todo Ver de hacer un TransmissionManager. + * \param connection Conexión a eliminar. */ - bool stop_transmission(std::string host, int port); + void on_plant_finished(const char* plant); /** - * Maneja los comandos recibidos por las conexiones. + * Envia el estado de una planta cuando esta se actualiza. * - * \todo Hacer un tipo Command abstracto o algo así. + * \param plant Planta actualizada. */ - void on_control_command_received(const Command& command, - ControlServer* server); + void on_plant_updated(const Plant* const); };