From: Leandro Lucarella Date: Mon, 24 Nov 2003 05:01:06 +0000 (+0000) Subject: Se pone un poco mas de orden. Desaparece la ControlClient::signal_connected(). X-Git-Tag: svn_import~182 X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/commitdiff_plain/1767eccd7e3ea6de4101d6d29c1d29ac0fba2a51?hp=e860608dbbbbaa43d0f241ab7a43da7c4608e192 Se pone un poco mas de orden. Desaparece la ControlClient::signal_connected(). --- diff --git a/Server/TODO b/Server/TODO index 53a61bb..956d62c 100644 --- a/Server/TODO +++ b/Server/TODO @@ -2,7 +2,6 @@ $Id$ - Agregar timeouts (recvtimeout() y sendtimeout()). - Darle bola al header Connection para saber si cerramos la conexión al finalizar el request o no. -- Hacer un try/catch en cada llamada al socket por si se desconecto, para que no - muera con un segmentation fault. -- Terminal Response para que lleguen bien todos los comandos al cliente. -- Ver si sirve Runnable::signal_error y usar si sirve. +- Redondear e implementar el tema de errores. +- Terminar Response para que lleguen bien todas las respuestas al cliente con + formato XML y codigo de error. diff --git a/Server/include/plaqui/server/connection.h b/Server/include/plaqui/server/connection.h index 7eda172..c700fcb 100644 --- a/Server/include/plaqui/server/connection.h +++ b/Server/include/plaqui/server/connection.h @@ -108,17 +108,13 @@ namespace Server { /** * Obtiene el nombre del host local de la conexión. - * \todo TODO - Debería devolver una copia? Porque podría morir la - * conexion y nosotros seguir usando la variable destruida. */ - const std::string& get_host(void) const; + const std::string get_host(void) const; /** * Obtiene el puerto local de la conexión. - * \todo TODO - Debería devolver una copia? Porque podría morir la - * conexion y nosotros seguir usando la variable destruida. */ - const Port& get_port(void) const; + const Port get_port(void) const; }; diff --git a/Server/include/plaqui/server/controlclient.h b/Server/include/plaqui/server/controlclient.h index 54b10be..7373fbc 100644 --- a/Server/include/plaqui/server/controlclient.h +++ b/Server/include/plaqui/server/controlclient.h @@ -43,6 +43,12 @@ namespace Server { ///////////////////////////////////////////////////////////////////// // Tipos. + public: + + ///////////////////////////////////////////////////////////////////// + /// \name Señales. + //@{ + public: /// Tipo de señal para indicar que se conectó. @@ -54,14 +60,32 @@ namespace Server { /// Tipo de señal para indicar que se recibió un error. typedef SigC::Signal1 SignalErrorReceived; + /// Tipo de señal para indicar que se recibió un frame. FIXME + typedef Receiver::SignalFrameReceived SignalFrameReceived; + + /** + * Obtiene la señal para indicar que se recibió una respuesta OK. + */ + SignalOKReceived& signal_ok_received(void); + + /** + * Obtiene la señal para indicar que se recibió un error. + */ + SignalErrorReceived& signal_error_received(void); + + /** + * Obtiene la señal que avisa cuando se recibió un cuadro. + * \todo TODO Temporal. + */ + SignalFrameReceived& signal_frame_received(void); + + //@} + ///////////////////////////////////////////////////////////////////// // Atributos. protected: - /// Señal para indicar que se conectó. - SignalConnected connected; - /// Señal para indicar que se recibió una respuesta OK. SignalOKReceived ok_received; @@ -105,26 +129,6 @@ namespace Server { */ void send(const Command& command); - /** - * Obtiene la señal para indicar que se conectó. - */ - SignalConnected& signal_connected(void); - - /** - * Obtiene la señal para indicar que se recibió una respuesta OK. - */ - SignalOKReceived& signal_ok_received(void); - - /** - * Obtiene la señal para indicar que se recibió un error. - */ - SignalErrorReceived& signal_error_received(void); - - /** - * Obtiene la señal que avisa cuando se recibió un cuadro. - */ - Receiver::SignalFrameReceived& signal_frame_received(void); - }; } diff --git a/Server/src/connection.cpp b/Server/src/connection.cpp index c355c86..31aaf1a 100644 --- a/Server/src/connection.cpp +++ b/Server/src/connection.cpp @@ -79,23 +79,20 @@ void Connection::finish(void) { cerr << __FILE__ << "(" << __LINE__ << ")" << ": finish();" << endl; #endif // DEBUG - //socket_mutex.lock(); + Runnable::finish(); try { + // Para que el socket retorne el control, cierro sus canales de E/S. socket->shutdown(sockbuf::shut_readwrite); - // FIXME socket->close(sockbuf::shut_readwrite); - // close(socket->sd()); } catch (const sockerr& e) { signal_error().emit(e.serrno(), e.errstr()); } - //socket_mutex.unlock(); - Runnable::finish(); } -const string& Connection::get_host(void) const { +const string Connection::get_host(void) const { return host; } -const Connection::Port& Connection::get_port(void) const { +const Connection::Port Connection::get_port(void) const { return port; } diff --git a/Server/src/controlclient.cpp b/Server/src/controlclient.cpp index b8dec74..130282d 100644 --- a/Server/src/controlclient.cpp +++ b/Server/src/controlclient.cpp @@ -51,17 +51,12 @@ ControlClient::~ControlClient(void) { ControlClient::ControlClient(const string& _host, const Connection::Port& _port) throw(sockerr): Connection(sockbuf::sock_stream, _host, _port) { -#ifdef DEBUG - cerr << __FILE__ << "(" << __LINE__ << ")" - << ": host = " << host - << " | port = " << port << endl; -#endif // DEBUG socket->connect(host.c_str(), port); host = socket->localhost(); port = socket->localport(); #ifdef DEBUG cerr << __FILE__ << "(" << __LINE__ << ")" - << ": REAL | host = " << host + << ": host = " << host << " | port = " << port << endl; #endif // DEBUG receiver = new Receiver(7528, host); @@ -74,14 +69,6 @@ void ControlClient::real_run(void) throw() { cerr << ": REAL | host = " << host << " | port = " << port << endl; #endif // DEBUG - try { - } catch (const sockerr& e) { - // TODO Poner una señal de error específica? - signal_error().emit(e.serrno(), e.errstr()); - return; - } - // TODO sacar signal_connected? - connected(); // TODO Temporal: el receiver empieza a escuchar. receiver->run(); while (!stop()) { @@ -131,10 +118,6 @@ void ControlClient::send(const Command& command) { #endif // DEBUG } -ControlClient::SignalConnected& ControlClient::signal_connected(void) { - return connected; -} - ControlClient::SignalOKReceived& ControlClient::signal_ok_received(void) { return ok_received; }