]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
Se empieza a implementar las modificaciones hechas en el diagrama del server.
authorLeandro Lucarella <llucax@gmail.com>
Wed, 22 Oct 2003 03:16:55 +0000 (03:16 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Wed, 22 Oct 2003 03:16:55 +0000 (03:16 +0000)
No compila.

Server/include/plaqui/server/controlserver.h
Server/include/plaqui/server/receiver.h
Server/include/plaqui/server/runnable.h
Server/include/plaqui/server/server.h
Server/include/plaqui/server/tcpserver.h [new file with mode: 0644]
Server/src/connection.cpp
Server/src/controlserver.cpp

index 7ad14cb594cb6a891ab09f3b0d46219657633987..8a646c659fcbf797ddb25deda7a11a88d899c30e 100644 (file)
@@ -28,7 +28,7 @@
 #ifndef PLAQUI_CONTROLSERVER_H
 #define PLAQUI_CONTROLSERVER_H
 
-#include "plaqui/server/connection.h"
+#include "plaqui/server/serverconnection.h"
 #include <socket++/sockinet.h>
 
 namespace PlaQui {
@@ -36,7 +36,7 @@ namespace PlaQui {
 namespace Server {
 
        /// Conexión para recibir comandos de control para una planta.
-       class ControlServer: public Connection {
+       class ControlServer: public ServerConnection {
 
                protected:
 
index 4bfda778309d51175f145fe04487b0fa990c6e9f..aa06544ff6ec912939fd4cda72d83d3634031fbb 100644 (file)
@@ -28,7 +28,7 @@
 #ifndef PLAQUI_RECEIVER_H
 #define PLAQUI_RECEIVER_H
 
-#include "plaqui/server/connection.h"
+#include "plaqui/server/serverconnection.h"
 #include <socket++/sockinet.h>
 #include <string>
 
@@ -37,7 +37,7 @@ namespace PlaQui {
 namespace Server {
 
        /// Conexión para recibir el estado de una planta.
-       class Receiver: public Connection {
+       class Receiver: public ServerConnection {
 
                public:
 
index 145a2316ebda83e74cdb58acb2bd08cdb53bee9d..2d34e6cc285ad5ed20ca4bf2a6a2c9c4d3d98ff1 100644 (file)
@@ -100,16 +100,15 @@ namespace Server {
                         * \param attach Si es true, la función no retorna hasta que no
                         *               finalice la tearea (no recomendable).
                         *
-                        * \see Para saber cuando la tarea fue finalizada puede utilizar
-                        *      la señal signal_finished().
+                        * \note Para saber cuando la tarea fue finalizada puede utilizar
+                        *       la señal signal_finished().
                         */
                        virtual void finish(bool attach = false);
 
                        /**
                         * Obtiene la señal que avisa cuando la tarea es finalizada.
                         *
-                        * \see Para saber cuando la tarea fue finalizada puede utilizar
-                        *      la señal signal_finished().
+                        * \see finish().
                         */
                        SignalFinished& signal_finished(void);
 
index 6265b6fe757113c2ffcb7097a9e1f6a5c8f3fb71..f16e2dfbb5eed5e0e4666abf23386345fa7982a4 100644 (file)
@@ -28,6 +28,7 @@
 #ifndef PLAQUI_SERVER_H
 #define PLAQUI_SERVER_H
 
+#include "plaqui/server/tcpserver.h"
 #include "plaqui/server/controlserver.h"
 #include "plaqui/server/transmitter.h"
 #include <socket++/sockinet.h>
@@ -40,27 +41,34 @@ 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;
 
-                       /// Conexiones de control.
-                       ControllerList controllers;
+               // Atributos.
+
+               private:
 
                        /// Transmisiones del estado de las plantas.
                        TransmitterList transmissions;
 
+                       // TODO:
+                       // PlantList plants;
+
+               // Métodos.
+
+               private:
+
                        /**
                         * Entra en el loop para atender conexiones.
                         */
@@ -103,12 +111,16 @@ namespace Server {
                         *
                         * \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_connection_command_received(void* command);
 
        };
 
diff --git a/Server/include/plaqui/server/tcpserver.h b/Server/include/plaqui/server/tcpserver.h
new file mode 100644 (file)
index 0000000..b379844
--- /dev/null
@@ -0,0 +1,111 @@
+// vim: set noexpandtab tabstop=4 shiftwidth=4:
+//----------------------------------------------------------------------------
+//                                  PlaQui
+//----------------------------------------------------------------------------
+// This file is part of PlaQui.
+//
+// PlaQui is free software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the Free Software
+// Foundation; either version 2 of the License, or (at your option) any later
+// version.
+//
+// PlaQui is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+// details.
+//
+// You should have received a copy of the GNU General Public License along
+// with PlaQui; if not, write to the Free Software Foundation, Inc., 59 Temple
+// Place, Suite 330, Boston, MA  02111-1307  USA
+//----------------------------------------------------------------------------
+// Creado:  Tue Oct 21 23:42:46 ART 2003
+// Autores: Leandro Lucarella <llucare@fi.uba.ar>
+//----------------------------------------------------------------------------
+//
+// $Id$
+//
+
+#ifndef PLAQUI_TCPSERVER_H
+#define PLAQUI_TCPSERVER_H
+
+#include "plaqui/server/controlserver.h"
+#include "plaqui/server/transmitter.h"
+#include <socket++/sockinet.h>
+#include <string>
+#include <list>
+
+namespace PlaQui {
+
+namespace Server {
+
+       /**
+        * Servidor de plantas químicas.
+        * Maneja muchas conexiones, de control o de transmisión.
+        */
+       class TCPServer: public Runnable {
+
+               // Tipos.
+
+               private:
+
+                       /// Lista de conexiones de control.
+                       typedef std::list<Connnection*> ConnectionList;
+
+               // Atributos.
+
+               private:
+
+                       /// Socket para escuchar conexiones.
+                       sockinetbuf socket;
+
+                       /// Conexiones de control.
+                       ConnectionList connections;
+
+               // Métodos.
+
+               private:
+
+                       /**
+                        * Entra en el loop para atender conexiones.
+                        */
+                       virtual void real_run(void);
+
+               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) = 0;
+
+               public:
+
+                       /**
+                        * Destructor.
+                        */
+                       virtual ~TCPServer(void) {}
+
+                       /**
+                        * Constructor.
+                        *
+                        * \param port Puerto en el cual escuchar.
+                        */
+                       TCPServer(int port);
+
+                       /**
+                        * Se encarga de borrar una conexión de la lista cuando finaliza.
+                        *
+                        * \param connection Conexión a eliminar.
+                        */
+                       void on_connection_finished(Connection* connection);
+
+       };
+
+}
+
+}
+
+#endif // PLAQUI_TCPSERVER_H
index c97685f96422e27fb5e35e5d0ebddcfa06d42152..18b5909f25bb4df3d33a6b1732d4cd1afc7e5072 100644 (file)
 
 #include "plaqui/server/connection.h"
 #include <socket++/sockinet.h>
+#ifdef DEBUG
+#      include <iostream>
+#endif // DEBUG
 
-using namespace PlaQui::Server;
+PlaQui::Server::Connection::~Connection(void) {
+#ifdef DEBUG
+       std::cerr << __FILE__ << ": destructor." << std::endl;
+#endif // DEBUG
+}
 
-Connection::Connection(const sockbuf::sockdesc& sd):
+PlaQui::Server::Connection::Connection(const sockbuf::sockdesc& sd):
                socket(sd) {
 #ifdef DEBUG
        std::cerr << __FILE__ << ": sd = " << sd.sock << std::endl;
 #endif // DEBUG
 }
 
-/*
-Connection::Connection(const sockinetbuf& sb):
-               socket(sb) {
-}
-*/
-
-Connection::Connection(sockbuf::type type):
+PlaQui::Server::Connection::Connection(sockbuf::type type):
                socket(type) {
+#ifdef DEBUG
+       std::cerr << __FILE__ << ": type = " << type << std::endl;
+#endif // DEBUG
 }
 
index 8789af1df4649630dad67e9db431c9d75266321d..544483fadade053c10fe81b4dac59524b4233c93 100644 (file)
 #include "plaqui/server/request.h"
 #include <cstring>
 #include <sstream>
+#ifdef DEBUG
+#      include <iostream>
+#endif // DEBUG
 
-using namespace PlaQui::Server;
+PlaQui::Server::ControlServer::~ControlServer(void) {
+#ifdef DEBUG
+       std::cerr << __FILE__ << ": destructor." << std::endl;
+#endif // DEBUG
+}
 
-ControlServer::ControlServer(const sockbuf::sockdesc& sd):
+PlaQui::Server::ControlServer::ControlServer(const sockbuf::sockdesc& sd):
                Connection(sd) {
 #ifdef DEBUG
-       std::cerr << "Compilado el " << __DATE__ << std::endl;
        std::cerr << __FILE__ << ": sd = " << sd.sock << std::endl;
 #endif // DEBUG
 }
 
-void ControlServer::real_run(void) {
+void PlaQui::Server::ControlServer::real_run(void) {
        // FIXME se tiene que ir a la clase para poder frenarlo desde afuera.
        bool stop = false;
        char buf[BUFFER_SIZE];
@@ -78,7 +84,8 @@ void ControlServer::real_run(void) {
                                // Si es la primera, no pasa nada, sigue esperando un request.
                        }
                }
-               // Manda mensaje a la planta.
+               // TODO: Manda mensaje a la planta.
+               //signal_command_received().emit(request);
                //dispatch_command(parse_command(sstr.str()));
 #ifdef DEBUG
                std::cerr << "Request: " << std::endl;