X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/f1f2d6a48b96c759d197d1227e157665d0d7bbcc..3a8788fb198a1e0590823745f39fbff81056db09:/Server/src/tcpserver.cpp diff --git a/Server/src/tcpserver.cpp b/Server/src/tcpserver.cpp index a7b3dc7..0f97fe5 100644 --- a/Server/src/tcpserver.cpp +++ b/Server/src/tcpserver.cpp @@ -27,78 +27,79 @@ #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; +using namespace std; -PlaQui::Server::TCPServer::~TCPServer(void) { +namespace PlaQui { + +namespace Server { + +TCPServer::~TCPServer(void) { #ifdef DEBUG - std::cerr << __FILE__ << ": destructor." << std::endl; + cerr << __FILE__ << ": destructor." << endl; #endif // DEBUG } -PlaQui::Server::TCPServer::TCPServer(int port): - socket(sockbuf::sock_stream) { +TCPServer::TCPServer(int port): socket(sockbuf::sock_stream) { #ifdef DEBUG - std::cerr << __FILE__ << ": port = " << port << std::endl; + cerr << __FILE__ << ": port = " << port << endl; #endif // DEBUG socket.bind(port); #ifdef DEBUG - std::cerr << __FILE__ << ": escuchando en " << socket.localhost() - << ":" << socket.localport() << "." << std::endl; + cerr << __FILE__ << ": escuchando en " << socket.localhost() + << ":" << socket.localport() << "." << endl; #endif // DEBUG socket.listen(MAX_PENDING_CONNECTIONS); #ifdef DEBUG - std::cerr << __FILE__ << ": [despues de listen()] escuchando en " - << socket.localhost() << ":" << socket.localport() << "." << std::endl; + cerr << __FILE__ << ": [despues de listen()] escuchando en " + << socket.localhost() << ":" << socket.localport() << "." << endl; #endif // DEBUG } -void PlaQui::Server::TCPServer::on_connection_finished( - Connection* connection) { +void TCPServer::on_connection_finished(Connection* connection) { #ifdef DEBUG - std::cerr << __FILE__ << ": on_connection_finished(connection = " - << connection << ")" << std::endl; + cerr << __FILE__ << ": on_connection_finished(connection = " + << connection << ")" << endl; #endif // DEBUG Glib::Mutex::Lock lock(connections_mutex); - // XXX connections_mutex.lock(); connections.remove(connection); #ifdef DEBUG - std::cerr << __FILE__ << ": lista de conexiones" << std::endl; + cerr << __FILE__ << ": lista de conexiones" << endl; for (ConnectionList::const_iterator i = connections.begin(); i != connections.end(); i++) { - std::cerr << "\t " << *i << std::endl; + cerr << "\t " << *i << endl; } #endif // DEBUG - // XXX connections_mutex.unlock(); } /// \todo TODO: ver tema de timeout o como salir de un accept(). -void PlaQui::Server::TCPServer::real_run(void) { +void TCPServer::real_run(void) { #ifdef DEBUG - std::cerr << __FILE__ << ": real_run()" << std::endl; + cerr << __FILE__ << ": real_run()" << endl; #endif // DEBUG Connection* connection; while (!stop) { // 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; + cerr << __FILE__ << ": real_run(): connection = " << connection + << endl; #endif // DEBUG Glib::Mutex::Lock lock(connections_mutex); + // XXX connections_mutex.lock(); connections.push_back(connection); #ifdef DEBUG - std::cerr << __FILE__ << ": real_run(): lista de conexiones" << std::endl; + cerr << __FILE__ << ": real_run(): lista de conexiones" << endl; for (ConnectionList::const_iterator i = connections.begin(); i != connections.end(); i++) { - std::cerr << "\t " << *i << std::endl; + cerr << "\t " << *i << endl; } #endif // DEBUG + // XXX connections_mutex.unlock(); // Si pongo el mutex antes del run(), + // muere. // Conecto la señal para cuando termina una conexión, borrarla. connection->signal_finished().connect( SigC::bind( @@ -106,7 +107,25 @@ 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. } } +TCPServer::ConnectionInfoList TCPServer::get_connected(void) { +#ifdef DEBUG + cerr << __FILE__ << ": get_connected()" << endl; +#endif // DEBUG + TCPServer::ConnectionInfoList con; + Glib::Mutex::Lock lock(connections_mutex); + for (ConnectionList::const_iterator i = connections.begin(); + i != connections.end(); i++) { + TCPServer::ConnectionInfo ci = + { (*i)->get_peerhost(), (*i)->get_peerport() }; + con.push_back(ci); + } + return con; +} + +} // namespace Server + +} // namespace PlaQui +