X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/a0481d50f6da9cac5efd3502c3657b3fc461ec0d..20fc4099b4db2caf4130d3b5d3bb61182167c75b:/Server/tests/server_test.cpp?ds=sidebyside diff --git a/Server/tests/server_test.cpp b/Server/tests/server_test.cpp index 033bb2e..1f505ee 100644 --- a/Server/tests/server_test.cpp +++ b/Server/tests/server_test.cpp @@ -25,41 +25,60 @@ // $Id$ // +#include "plaqui/server/connection.h" #include "plaqui/server/server.h" +#include "plaqui/server/string.h" #include +#include #include -#include #include using namespace std; using namespace PlaQui::Server; +Server* server = NULL; + +void on_error(const Runnable::Error& code, const string& desc) { + cerr << "--------------------------------------------------------" << endl; + cerr << "Error en el servidor:" << endl; + cerr << "Código: " << code << endl; + cerr << "Descripción: " << desc << endl; + cerr << "--------------------------------------------------------" << endl; +} + +void on_finished(void) { + cerr << "Murió el servidor!" << endl; + server = NULL; +} + int main(int argc, char* argv[]) { // Termina con mas informacion si hay una excepcion no manejada. set_terminate (__gnu_cxx::__verbose_terminate_handler); - // Necesita argumentos. - if (argc != 2) { - cerr << "Faltan argumentos: " << endl; - cerr << "\t" << argv[0] << " port" << endl; - return 1; - } + // Bienvenida. + cout << "PlaQui Server. Modo de uso: " << endl; + cout << "\t" << argv[0] << " [planta] [puerto]" << endl; - // Obtengo puerto. - unsigned port; - { - stringstream str(argv[1]); - str >> port; + // Acepta argumentos. + string filename = "prueba.xml"; + Connection::Port port = 7522; + if (argc > 1) { + // Obtengo nombre del archivo de la planta. + filename = argv[1]; + // Si tiene 2 parámetros. + if (argc > 2) { + // Obtengo puerto. + to(argv[2], port); + } } // Inicializa threads. Glib::thread_init(); try { - // Corre el server. - Server server(port); - server.run(false); + // Crea el server (empieza a escuchar). + server = new Server(filename, port); } catch (const sockerr& e) { cerr << "Socket Error: " << e.operation() << " | serrno = " << e.serrno() << " | errstr = " << e.errstr() << endl; @@ -78,13 +97,31 @@ int main(int argc, char* argv[]) { } else if (e.benign()) { cerr << "Es: recoverable read/write error like EINTR etc." << endl; } + return e.serrno(); } catch (const exception& e) { cerr << "Error: " << e.what() << endl; + return 1; } catch (const char* e) { cerr << "Error: " << e << endl; + return 2; } catch (...) { cerr << "Error desconocido!" << endl; + return 3; } + // Conecto señal para atender errores. + server->signal_error().connect(SigC::slot(on_error)); + + // Corre el server. + server->run(false); + + // Espera a que el server se muera. + while (server) { + Glib::usleep(1000000); + } + + // Como no detachee el server, lo tengo que eliminar a mano. + //delete server; + return 0; }