X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/71586a11d38b52295c9fb1884d4010adf6dd23b0..4404d8472c0088ec061b2f4f6527412f7ba23569:/Server/tests/client_test.cpp?ds=sidebyside diff --git a/Server/tests/client_test.cpp b/Server/tests/client_test.cpp index 3f9f52c..9ff2fbb 100644 --- a/Server/tests/client_test.cpp +++ b/Server/tests/client_test.cpp @@ -27,9 +27,7 @@ #include "plaqui/server/controlclient.h" #include "plaqui/server/string.h" -//#include #include -#include #include #include @@ -38,6 +36,14 @@ using namespace PlaQui::Server; ControlClient* client = NULL; +void on_error(const Runnable::Error& code, const string& desc) { + cerr << "--------------------------------------------------------" << endl; + cerr << "Error en el cliente:" << endl; + cerr << "Código: " << code << endl; + cerr << "Descripción: " << desc << endl; + cerr << "--------------------------------------------------------" << endl; +} + void on_finished(void) { client = NULL; } @@ -46,8 +52,14 @@ void on_connected(void) { cout << " Conectado! :-)" << endl; } -void on_ok_received(void) { +void on_ok_received(const string& body) { cout << " Respuesta recibida: OK! :-D" << endl; + cout << " Body: " << body << endl; +} + +void on_frame_received(const string& frame) { + cout << " Frame recibido! :-D" << endl; + cout << frame << endl; } void on_error_received(unsigned code) { @@ -71,11 +83,10 @@ int main(int argc, char* argv[]) { // Obtengo host. host = argv[1]; } - unsigned port = 7522; + // Obtengo puerto. + Connection::Port port = 7522; if (argc > 2) { - // Obtengo puerto. - stringstream str(argv[2]); - str >> port; + to(argv[2], port); } // Inicializa threads. @@ -84,13 +95,18 @@ int main(int argc, char* argv[]) { try { // Corre el cliente. client = new ControlClient(host, port); + client->signal_error().connect(SigC::slot(on_error)); client->signal_finished().connect(SigC::slot(on_finished)); client->signal_connected().connect(SigC::slot(on_connected)); client->signal_ok_received().connect(SigC::slot(on_ok_received)); client->signal_error_received().connect(SigC::slot(on_error_received)); + client->signal_frame_received().connect(SigC::slot(on_frame_received)); client->run(); char buf[BUFSIZ]; - while (client && cin.getline(buf, BUFSIZ)) { + while (cin.getline(buf, BUFSIZ)) { + if (!client) { + break; + } vector v = String(buf).split(' '); switch (v.size()) { case 0: @@ -104,16 +120,34 @@ int main(int argc, char* argv[]) { break; default: Command cmd(v[0], v[1]); - v.erase(v.begin(), v.begin() + 1); + v.erase(v.begin(), v.begin() + 2); cmd.set_args(v); client->send(cmd); break; } } + } catch (const sockerr& e) { + cerr << "Socket Error: " << e.operation() << " | serrno = " + << e.serrno() << " | errstr = " << e.errstr() << endl; + if (e.io()) { + cerr << "Es: non-blocking and interrupt io recoverable error." + << endl; + } else if (e.arg()) { + cerr << "Es: incorrect argument supplied. recoverable error." + << endl; + } else if (e.op()) { + cerr << "Es: operational error. recovery difficult." << endl; + } else if (e.conn()) { + cerr << "Es: connection error." << endl; + } else if (e.addr()) { + cerr << "Es: address error." << endl; + } else if (e.benign()) { + cerr << "Es: recoverable read/write error like EINTR etc." << endl; + } + } catch (const exception& e) { + cerr << "Error: " << e.what() << endl; } catch (const char* e) { cerr << "Error: " << e << endl; - } catch (exception& e) { - cerr << "Error: " << e.what() << endl; } catch (...) { cerr << "Error desconocido!" << endl; }