]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/tests/client_test.cpp
Se emprolija un poco:
[z.facultad/75.42/plaqui.git] / Server / tests / client_test.cpp
index 3f9f52ce2d36327e8556b76328752bb681a51201..9ff2fbb54f9c9fe041032c630b0f4ee12888b36d 100644 (file)
@@ -27,9 +27,7 @@
 
 #include "plaqui/server/controlclient.h"
 #include "plaqui/server/string.h"
-//#include <socket++/sockinet.h>
 #include <iostream>
-#include <sstream>
 #include <exception>
 #include <vector>
 
@@ -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<string> 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;
        }