]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/include/plaqui/server/server.h
- Se mejora el manejo de errores (excepciones) en los tests (y en algunas otras
[z.facultad/75.42/plaqui.git] / Server / include / plaqui / server / server.h
index f16e2dfbb5eed5e0e4666abf23386345fa7982a4..1179fdc2b9ae3524519238a088d5b63f646ca3f7 100644 (file)
@@ -31,6 +31,8 @@
 #include "plaqui/server/tcpserver.h"
 #include "plaqui/server/controlserver.h"
 #include "plaqui/server/transmitter.h"
 #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 <socket++/sockinet.h>
 #include <string>
 #include <list>
 #include <socket++/sockinet.h>
 #include <string>
 #include <list>
@@ -52,8 +54,8 @@ namespace Server {
                        /// Lista de conexiones de control.
                        typedef std::list<Transmitter*> TransmitterList;
 
                        /// Lista de conexiones de control.
                        typedef std::list<Transmitter*> TransmitterList;
 
-                       // TODO:
-                       // typedef std::list<Plant*> PlantList;
+                       /// Lista de plantas químicas.
+                       typedef std::list<Plant*> PlantList;
 
                // Atributos.
 
 
                // Atributos.
 
@@ -62,24 +64,49 @@ namespace Server {
                        /// Transmisiones del estado de las plantas.
                        TransmitterList transmissions;
 
                        /// Transmisiones del estado de las plantas.
                        TransmitterList transmissions;
 
-                       // TODO:
-                       // PlantList plants;
+                       /// Mutex para las transmisiones.
+                       Glib::Mutex transmissions_mutex;
+
+                       // Plantas disponibles en el servidor.
+                       PlantList plants;
+
+                       /// Mutex para las plantas.
+                       Glib::Mutex plants_mutex;
 
                // Métodos.
 
 
                // Métodos.
 
-               private:
+               protected:
+
+                       /**
+                        * Obtiene una nueva \ref Connection "conexión".
+                        *
+                        * \param sd Descriptor del socket de la nueva conexión.
+                        *
+                        * \return Nueva conexión.
+                        */
+                       virtual Connection* new_connection(const sockbuf::sockdesc& sd);
 
                        /**
 
                        /**
-                        * Entra en el loop para atender conexiones.
+                        * Maneja el comando server/status.
                         */
                         */
-                       virtual void real_run(void);
+                       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);
 
                public:
 
                        /**
                         * Destructor.
                         */
 
                public:
 
                        /**
                         * Destructor.
                         */
-                       virtual ~Server(void) {}
+                       virtual ~Server(void);
 
                        /**
                         * Constructor.
 
                        /**
                         * Constructor.
@@ -117,10 +144,9 @@ namespace Server {
 
                        /**
                         * Maneja los comandos recibidos por las conexiones.
 
                        /**
                         * Maneja los comandos recibidos por las conexiones.
-                        *
-                        * \todo Hacer un tipo Command abstracto o algo así.
                         */
                         */
-                       void on_connection_command_received(void* command);
+                       void on_control_command_received(const Command& command,
+                                       ControlServer* controlserver);
 
        };
 
 
        };