]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/src/tcpserver.cpp
- Se arregla el bug de ControlClient::get_host() y ControlClient::get_port().
[z.facultad/75.42/plaqui.git] / Server / src / tcpserver.cpp
index 8569c7ab9b292073e725b2cb539c3eeb24e0a646..e78e53ca82e65012b5c35fbcd08f4d38308140ed 100644 (file)
@@ -41,12 +41,22 @@ TCPServer::~TCPServer(void) {
 #ifdef DEBUG
        cerr << __FILE__ <<  ": destructor." << endl;
 #endif // DEBUG
 #ifdef DEBUG
        cerr << __FILE__ <<  ": destructor." << endl;
 #endif // DEBUG
+       Glib::Mutex::Lock lock(connections_mutex);
+       for (ConnectionList::iterator con = connections.begin();
+                       con != connections.end(); con++) {
+               (*con)->finish(true);
+       }
 }
 
 }
 
-TCPServer::TCPServer(int port):        socket(sockbuf::sock_stream) {
+TCPServer::TCPServer(const Connection::Port& port): socket(sockbuf::sock_stream) {
 #ifdef DEBUG
        cerr << __FILE__ <<  ": port = " << port << endl;
 #endif // DEBUG
 #ifdef DEBUG
        cerr << __FILE__ <<  ": port = " << port << endl;
 #endif // DEBUG
+       // FIXME
+       //cerr << "recvtimeout = " << socket.recvtimeout(1) << endl;
+       //cerr << "sendtimeout = " << socket.sendtimeout(1) << endl;
+       //cerr << "recvtimeout = " << socket.recvtimeout(1) << endl;
+       //cerr << "sendtimeout = " << socket.sendtimeout(1) << endl;
        socket.bind(port);
 #ifdef DEBUG
        cerr << __FILE__ <<  ": escuchando en " << socket.localhost()
        socket.bind(port);
 #ifdef DEBUG
        cerr << __FILE__ <<  ": escuchando en " << socket.localhost()
@@ -59,6 +69,13 @@ TCPServer::TCPServer(int port):      socket(sockbuf::sock_stream) {
 #endif // DEBUG
 }
 
 #endif // DEBUG
 }
 
+void TCPServer::finish(bool attach) {
+       //socket_mutex.lock();
+       socket.shutdown(sockbuf::shut_readwrite);
+       //socket_mutex.unlock();
+       Runnable::finish(attach);
+}
+
 void TCPServer::on_connection_finished(Connection* connection) {
 #ifdef DEBUG
        cerr << __FILE__ <<  ": on_connection_finished(connection = "
 void TCPServer::on_connection_finished(Connection* connection) {
 #ifdef DEBUG
        cerr << __FILE__ <<  ": on_connection_finished(connection = "
@@ -110,6 +127,37 @@ void TCPServer::real_run(void) {
        }
 }
 
        }
 }
 
+bool TCPServer::disconnect(const std::string& host, const Connection::Port& port) {
+#ifdef DEBUG
+       cerr << __FILE__ <<  ": disconnect(host = " << host
+               << ", port = " << port << ")" << endl;
+#endif // DEBUG
+       Glib::Mutex::Lock lock(connections_mutex);
+       for (ConnectionList::iterator con = connections.begin();
+                       con != connections.end(); con++) {
+               if (((*con)->get_host() == host) && ((*con)->get_port() == port)) {
+                       (*con)->finish();
+                       return true;
+               }
+       }
+       return false;
+}
+
+TCPServer::ConnectionInfoList TCPServer::get_connected(void) {
+#ifdef DEBUG
+       cerr << __FILE__ <<  ": get_connected()" << endl;
+#endif // DEBUG
+       TCPServer::ConnectionInfoList cl;
+       Glib::Mutex::Lock lock(connections_mutex);
+       for (ConnectionList::const_iterator con = connections.begin();
+                       con != connections.end(); con++) {
+               TCPServer::ConnectionInfo ci =
+                       { (*con)->get_host(), (*con)->get_port() };
+               cl.push_back(ci);
+       }
+       return cl;
+}
+
 } // namespace Server
 
 } // namespace PlaQui
 } // namespace Server
 
 } // namespace PlaQui