X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/6e0194f46ac77c18bfeabf84ef94a32f23e41073..34fb46485db0fb44f8dcc532866d988f8e54caa2:/Server/include/plaqui/server/server.h diff --git a/Server/include/plaqui/server/server.h b/Server/include/plaqui/server/server.h index 2364273..8c92ca8 100644 --- a/Server/include/plaqui/server/server.h +++ b/Server/include/plaqui/server/server.h @@ -28,48 +28,63 @@ #ifndef PLAQUI_SERVER_H #define PLAQUI_SERVER_H +#include "plaqui/server/tcpserver.h" #include "plaqui/server/controlserver.h" #include "plaqui/server/transmitter.h" +#include "plaqui/server/command.h" #include #include #include -namespace Plaqui { +namespace PlaQui { + +namespace Server { /** * Servidor de plantas químicas. - * Maneja muchas conexiones, de control o de transmisión. + * Maneja múltiples conexiones, de control o de transmisión. */ - class Server: public Runnable { + class Server: public TCPServer { - private: + // Tipos. - /// Lista de conexiones de control. - typedef std::list ControllerList; + private: /// Lista de conexiones de control. typedef std::list TransmitterList; - /// Socket para escuchar conexiones. - sockinetbuf socket; + // TODO: + // typedef std::list PlantList; + + // Atributos. - /// Conexiones de control. - ControllerList controllers; + private: /// Transmisiones del estado de las plantas. TransmitterList transmissions; + // TODO: + // PlantList plants; + + // Métodos. + + protected: + /** - * Entra en el loop para atender conexiones. + * Obtiene una nueva \ref Connection "conexión". + * + * \param sd Descriptor del socket de la nueva conexión. + * + * \return Nueva conexión. */ - virtual void real_run(void); + virtual Connection* new_connection(const sockbuf::sockdesc& sd); public: /** * Destructor. */ - virtual ~Server(void) {} + virtual ~Server(void); /** * Constructor. @@ -101,15 +116,22 @@ namespace Plaqui { * * \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. + * \todo Ver de hacer un TransmissionManager. */ - bool stop_transmission(std::string host = "localhost", - int port = 7528); + bool stop_transmission(std::string host, int port); + + /** + * Maneja los comandos recibidos por las conexiones. + * + * \todo Hacer un tipo Command abstracto o algo así. + */ + void on_control_command_received(const Command& command, + ControlServer* server); }; } +} + #endif // PLAQUI_SERVER_H