X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/00cffd5f7c35a915c09d55e6292775e9e01bdeec..6bffb655ac989fe4f115763270f84175bf24e4bb:/Server/src/controlclient.cpp diff --git a/Server/src/controlclient.cpp b/Server/src/controlclient.cpp index 99c5348..ffce9c0 100644 --- a/Server/src/controlclient.cpp +++ b/Server/src/controlclient.cpp @@ -30,35 +30,77 @@ # include #endif // DEBUG -PlaQui::Server::ControlClient::~ControlClient(void) { +using namespace std; + +namespace PlaQui { + +namespace Server { + +ControlClient::~ControlClient(void) { #ifdef DEBUG - std::cerr << __FILE__ << ": destructor." << std::endl; + cerr << __FILE__ << ": destructor." << endl; #endif // DEBUG } -PlaQui::Server::ControlClient::ControlClient(std::string host, int port): +ControlClient::ControlClient(string host, int port): Connection(sockbuf::sock_stream) { #ifdef DEBUG - std::cerr << __FILE__ << ": host" << host - << " | port = " << port << std::endl; + cerr << __FILE__ << ": host" << host + << " | port = " << port << endl; #endif // DEBUG - // FIXME - poner en run(). socket->connect(host.c_str(), port); + if (!socket->is_open()) { + throw ios::failure("Can't connect!"); + } } -void PlaQui::Server::ControlClient::real_run(void) { +void ControlClient::real_run(void) { #ifdef DEBUG - std::cerr << __FILE__ << ": real_run." << std::endl; + cerr << __FILE__ << ": real_run." << endl; #endif // DEBUG + while (!stop) { + HTTPResponse response; + try { + //Glib::Mutex::Lock lock(socket_mutex); + socket >> response; + // Si se cerró el socket. + } catch (const ios::failure& e) { + stop = true; + continue; + // Si hay un error al parsear la respuesta. + } catch (const HTTPResponse::Error& e) { #ifdef DEBUG - // FIXME - debería tirar una excepción? - if (!socket->is_open()) { - std::cerr << "No se pudo conectar a " << socket->peerhost() << - ":" << socket->peerport() << "." << std::endl; - } else { - std::cerr << "Conectado a " << socket->peerhost() << - ":" << socket->peerport() << "." << std::endl; + cerr << __FILE__ << " : real_run() ERROR nro: " << e << endl; #endif // DEBUG + // TODO - pasar como parametro codigo de error o algo. + error_received(); + continue; + } + switch (response.status_code) { + case HTTPMessage::OK: + ok_received(); + default: + error_received(); + } } } +ControlClient::SignalOKReceived& ControlClient::signal_ok_received(void) { + return ok_received; +} + +ControlClient::SignalErrorReceived& ControlClient::signal_error_received(void) { + return error_received; +} + +void ControlClient::send(const Command& command) { + socket << command << flush; +#ifdef DEBUG + cerr << __FILE__ << ": send() Enviado!" << endl; +#endif // DEBUG +} + +} // namespace Server + +} // namespace PlaQui +