X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/7e74b790d290cd7d776349503bb361c47933c01f..9c0c758e9af50f624414decbaae43c04e8d8e3f9:/Server/src/controlclient.cpp?ds=sidebyside diff --git a/Server/src/controlclient.cpp b/Server/src/controlclient.cpp index 15b576e..130282d 100644 --- a/Server/src/controlclient.cpp +++ b/Server/src/controlclient.cpp @@ -43,38 +43,35 @@ ControlClient::~ControlClient(void) { << ": destructor." << endl; #endif // DEBUG // TODO Temporal: espero que el receiver muera. - receiver.finish(true); + // Conectar señal on_receiver_finished() y esperar a que el puntero sea + // NULL para saber que terminó. + receiver->finish(); } ControlClient::ControlClient(const string& _host, const Connection::Port& _port) throw(sockerr): Connection(sockbuf::sock_stream, _host, _port) { + socket->connect(host.c_str(), port); + host = socket->localhost(); + port = socket->localport(); #ifdef DEBUG cerr << __FILE__ << "(" << __LINE__ << ")" << ": host = " << host << " | port = " << port << endl; #endif // DEBUG - socket->connect(host.c_str(), port); - host = socket->localhost(); - port = socket->localport(); + receiver = new Receiver(7528, host); } -void ControlClient::real_run(void) { +void ControlClient::real_run(void) throw() { #ifdef DEBUG cerr << __FILE__ << "(" << __LINE__ << ")" << ": real_run." << endl; + cerr << ": REAL | host = " << host + << " | port = " << port << endl; #endif // DEBUG - try { - } catch (const sockerr& e) { - // TODO Poner una señal de error específica? - error(e.serrno(), e.errstr()); - return; - } - // TODO sacar signal_connected? - connected(); // TODO Temporal: el receiver empieza a escuchar. - receiver.run(); - while (!stop) { + receiver->run(); + while (!stop()) { HTTPResponse response; try { //Glib::Mutex::Lock lock(socket_mutex); @@ -82,10 +79,10 @@ void ControlClient::real_run(void) { // Si se cerró el socket. } catch (const ios::failure& e) { // TODO poner buenos codigos de error. - error(1000000, "Se desconectó."); + signal_error().emit(1000000, "Se desconectó."); return; } catch (const sockerr& e) { - error(e.serrno(), e.errstr()); + signal_error().emit(e.serrno(), e.errstr()); return; // Si hay un error al parsear la respuesta. } catch (const HTTPResponse::Error& e) { @@ -112,7 +109,7 @@ void ControlClient::send(const Command& command) { try { socket << command << flush; } catch (const sockerr& e) { - error(e.serrno(), e.errstr()); + signal_error().emit(e.serrno(), e.errstr()); finish(); } #ifdef DEBUG @@ -121,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; } @@ -138,7 +131,7 @@ Receiver::SignalFrameReceived& ControlClient::signal_frame_received(void) { // XXX - cuidado, esto puede dar quilombo si no esta protegido por un mutex, // aunque no deberia porque la señal no es llamada hasta que no se empice // la transmision y la señal se conecta antes de pedir la transmision. - return receiver.signal_frame_received(); + return receiver->signal_frame_received(); } } // namespace Server