]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/tests/server_test.cpp
Se emprolija un poco:
[z.facultad/75.42/plaqui.git] / Server / tests / server_test.cpp
index bdb6190c7b88e29c0f16de19085307134c70290f..25d01a676dcbaf258cd9ab1222c02b58790775fe 100644 (file)
 using namespace std;
 using namespace PlaQui::Server;
 
+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;
+}
+
 int main(int argc, char* argv[]) {
 
        // Termina con mas informacion si hay una excepcion no manejada.
@@ -60,10 +68,10 @@ int main(int argc, char* argv[]) {
        // Inicializa threads.
        Glib::thread_init();
 
+       Server* server = NULL;
        try {
-               // Corre el server.
-               Server server(filename, 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;
@@ -82,13 +90,26 @@ 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);
+
+       // Como no detachee el server, lo tengo que eliminar a mano.
+       delete server;
+
        return 0;
 }