X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/ab9300aaf1217f0c3b45dd5f1f1fdc1c5e5bd1be..33ad6d417a5092b5312916d6b11c137f12698c16:/Server/src/tcpserver.cpp?ds=sidebyside diff --git a/Server/src/tcpserver.cpp b/Server/src/tcpserver.cpp index 4131224..a7b3dc7 100644 --- a/Server/src/tcpserver.cpp +++ b/Server/src/tcpserver.cpp @@ -27,10 +27,14 @@ #include "plaqui/server/tcpserver.h" #include +// FIXME - para probar mutex +#include #ifdef DEBUG # include #endif // DEBUG +const unsigned PlaQui::Server::TCPServer::MAX_PENDING_CONNECTIONS = 10; + PlaQui::Server::TCPServer::~TCPServer(void) { #ifdef DEBUG std::cerr << __FILE__ << ": destructor." << std::endl; @@ -47,7 +51,7 @@ PlaQui::Server::TCPServer::TCPServer(int port): std::cerr << __FILE__ << ": escuchando en " << socket.localhost() << ":" << socket.localport() << "." << std::endl; #endif // DEBUG - socket.listen(); + socket.listen(MAX_PENDING_CONNECTIONS); #ifdef DEBUG std::cerr << __FILE__ << ": [despues de listen()] escuchando en " << socket.localhost() << ":" << socket.localport() << "." << std::endl; @@ -60,7 +64,8 @@ void PlaQui::Server::TCPServer::on_connection_finished( std::cerr << __FILE__ << ": on_connection_finished(connection = " << connection << ")" << std::endl; #endif // DEBUG - // TODO: poner lock. + Glib::Mutex::Lock lock(connections_mutex); + // XXX connections_mutex.lock(); connections.remove(connection); #ifdef DEBUG std::cerr << __FILE__ << ": lista de conexiones" << std::endl; @@ -69,33 +74,31 @@ void PlaQui::Server::TCPServer::on_connection_finished( std::cerr << "\t " << *i << std::endl; } #endif // DEBUG - // TODO: sacar lock. + // XXX connections_mutex.unlock(); } +/// \todo TODO: ver tema de timeout o como salir de un accept(). void PlaQui::Server::TCPServer::real_run(void) { #ifdef DEBUG std::cerr << __FILE__ << ": real_run()" << std::endl; #endif // DEBUG Connection* connection; while (!stop) { - // TODO: ver tema de timeout o como salir de un accept(). // Forma grasa de salir del accept: crear conexion que salga al toque. connection = new_connection(socket.accept()); #ifdef DEBUG - std::cerr << __FILE__ << ": real_run(): connection = " << connection - << std::endl; + std::cerr << __FILE__ << ": real_run(): connection = " << connection + << std::endl; #endif // DEBUG - // TODO: poner lock. + Glib::Mutex::Lock lock(connections_mutex); connections.push_back(connection); #ifdef DEBUG - std::cerr << __FILE__ << ": real_run(): lista de conexiones" << std::endl; - for (ConnectionList::const_iterator i = connections.begin(); - i != connections.end(); i++) { - std::cerr << "\t " << *i << std::endl; - } + std::cerr << __FILE__ << ": real_run(): lista de conexiones" << std::endl; + for (ConnectionList::const_iterator i = connections.begin(); + i != connections.end(); i++) { + std::cerr << "\t " << *i << std::endl; + } #endif // DEBUG - // TODO: sacar lock. - // TODO: esto va en Server::new_connection() // Conecto la señal para cuando termina una conexión, borrarla. connection->signal_finished().connect( SigC::bind( @@ -103,6 +106,7 @@ void PlaQui::Server::TCPServer::real_run(void) { &TCPServer::on_connection_finished), connection)); connection->run(); + //connections_mutex.unlock(); // Si pongo el mutex antes del run(), muere. } }