]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/include/plaqui/server/server.h
* Se agrega un Tanque al ejemplo, y ANDA!!!!
[z.facultad/75.42/plaqui.git] / Server / include / plaqui / server / server.h
index 2364273e0d731a97440133aa573ec65218972089..8c92ca806942011126082d0607507ecdf67c6cb3 100644 (file)
 #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 <socket++/sockinet.h>
 #include <string>
 #include <list>
 
-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<ControlServer*> ControllerList;
+               private:
 
                        /// Lista de conexiones de control.
                        typedef std::list<Transmitter*> TransmitterList;
 
-                       /// Socket para escuchar conexiones.
-                       sockinetbuf socket;
+                       // TODO:
+                       // typedef std::list<Plant*> 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