#include "plaqui/server/controlclient.h"
#include "plaqui/server/string.h"
-//#include <socket++/sockinet.h>
#include <iostream>
-#include <sstream>
#include <exception>
#include <vector>
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;
}
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) {
// 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.
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:
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;
}