// $Id$
//
-#include "server.h"
+#include "plaqui/server/connection.h"
+#include "plaqui/server/server.h"
+#include "plaqui/server/string.h"
#include <socket++/sockinet.h>
#include <iostream>
-#include <sstream>
#include <exception>
using namespace std;
-using namespace Plaqui;
+using namespace PlaQui::Server;
int main(int argc, char* argv[]) {
// Termina con mas informacion si hay una excepcion no manejada.
- std::set_terminate (__gnu_cxx::__verbose_terminate_handler);
+ 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);
+ }
}
- // Corre el server.
- Server server(port);
- server.run(false);
+ // Inicializa threads.
+ Glib::thread_init();
+
+ try {
+ // Corre el server.
+ Server server(filename, port);
+ server.run(false);
+ } 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 (...) {
+ cerr << "Error desconocido!" << endl;
+ }
return 0;
}