X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/7e74b790d290cd7d776349503bb361c47933c01f..6f70c17ffefd6150b68ac0f64a8116e730437408:/Server/src/server.cpp diff --git a/Server/src/server.cpp b/Server/src/server.cpp index 340c2f0..e332866 100644 --- a/Server/src/server.cpp +++ b/Server/src/server.cpp @@ -29,6 +29,7 @@ #include "plaqui/server/connection.h" #include "plaqui/server/controlserver.h" #include +#include #include #include #ifdef DEBUG @@ -47,10 +48,19 @@ Server::~Server(void) { cerr << __FILE__ << "(" << __LINE__ << ")" << ": destructor." << endl; #endif // DEBUG - // Termino plantas. - Glib::Mutex::Lock lock(plants_mutex); - for (PlantList::iterator i = plants.end(); i != plants.end(); i++) { - i->second->finish(true); + // Mando a terminar todas las plantas. + plants_mutex.lock(); + for (PlantList::iterator i = plants.begin(); i != plants.end(); i++) { + i->second->finish(); + } + PlantList::size_type count = plants.size(); + plants_mutex.unlock(); + // Espero que terminen realmente. + while (count) { + Glib::usleep(10000); // 10 milisegundos + plants_mutex.lock(); + count = plants.size(); + plants_mutex.unlock(); } } @@ -60,7 +70,7 @@ Server::Server(const string& plant_filename, const Connection::Port& port) cerr << __FILE__ << "(" << __LINE__ << ")" << ": port = " << port << endl; #endif // DEBUG - // FIXME + // FIXME - hacer que se puedan cargar mas plantas bien. Glib::Mutex::Lock lock(plants_mutex); plants["default"] = new Plant(plant_filename); plants["default"]->signal_finished().connect( @@ -114,6 +124,19 @@ void Server::on_control_command_received(const Command& command, finish(); response = new HTTPResponse(HTTPMessage::OK, ""); + response->headers["Content-Type"] = "text/xml; charset=iso-8859-1"; + controlserver->send(*response); + delete response; + // Creo una conexión suicida para que el accept() del server retorne + // el control y el server pueda terminar realmente. + try { + sockinetbuf suicida(sockbuf::sock_stream); + suicida.connect(socket.localhost(), socket.localport()); + } catch (...) { + // FIXME + signal_error().emit(12345, "ahhhh! no puedo crear conexion suicida"); + } + return; } else { response = new HTTPResponse(HTTPMessage::NOT_FOUND, "");