]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/include/plaqui/server/tcpserver.h
Se arregla el bug que hacia que el cliente levante mal archivos XML grandes.
[z.facultad/75.42/plaqui.git] / Server / include / plaqui / server / tcpserver.h
index 66fe3be524a141f88e4f60f3d7b8222039b28c7c..368594e6b41e394cd2f521a61d65761954410da8 100644 (file)
@@ -31,6 +31,7 @@
 #include "plaqui/server/runnable.h"
 #include "plaqui/server/connection.h"
 #include <socket++/sockinet.h>
+#include <sigc++/signal.h>
 #include <list>
 #include <vector>
 
@@ -39,8 +40,25 @@ namespace PlaQui {
 namespace Server {
 
        /**
-        * Servidor de plantas químicas.
-        * Maneja muchas conexiones, de control o de transmisión.
+        * Servidor genéríco TCP/IP.
+        *
+        * Maneja muchas conexiones, en threads. En términos generales todo lo que
+        * hace es algo parecido a esto:
+        * \code
+        * while (!stop) {
+        *     Connection* conexion = new_connection(accept());
+        *     connections.push_back(conexion);
+        * }
+        * \endcode
+        *
+        * new_connection() es un método virtual puro que hay que definir en las
+        * subclases para hacer un servidor específico que trabaje con un protocolo
+        * determinado. new_connection() devuelve un puntero a una
+        * \ref Connection "conexión".
+        *
+        * on_connection_finished() maneja la
+        * \ref Runnable::signal_finished "señal para indicar que una conexión terminó"
+        * para eliminarla de la \ref connections "lista de conexiones".
         */
        class TCPServer: public Runnable {
 
@@ -73,14 +91,33 @@ namespace Server {
                        /// Lista de información de conexiones de control.
                        typedef std::vector<ConnectionInfo> ConnectionInfoList;
 
+               /////////////////////////////////////////////////////////////////////
+               /// \name Señales
+               //@{
+
+               public:
+
+                       /// Tipo de señal para indicar que se inició una conexión.
+                       typedef SigC::Signal2<void, const std::string&,
+                                       const Connection::Port&> SignalConnectionOpened;
+
+                       /// Obtiene la señal que avisa que se inició una conexión.
+                       SignalConnectionOpened& signal_connection_opened(void);
+
+               //@}
+
                /////////////////////////////////////////////////////////////////////
                // Atributos.
 
-               protected: //FIXME
+               protected:
 
                        /// Socket para escuchar conexiones.
                        sockinetbuf socket;
-               private: // FIXME
+
+               private:
+
+                       /// Señal que indica que se inició una conexión.
+                       SignalConnectionOpened _connection_opened;
 
                        /// Conexiones de control.
                        ConnectionList connections;