#include "plaqui/server/connection.h"
#include <socket++/sockinet.h>
#include <list>
+#include <vector>
namespace PlaQui {
*/
class TCPServer: public Runnable {
- // Tipos.
+ // Constantes.
private:
/// Cantidad máxima de conexiones pendientes.
- static const unsigned MAX_PENDING_CONNECTIONS;
+ static const unsigned MAX_PENDING_CONNECTIONS = 10;
+
+ // Tipos.
+
+ private:
/// Lista de conexiones de control.
typedef std::list<Connection*> ConnectionList;
+ public:
+
+ /// Información sobre una conexión de contro.
+ struct ConnectionInfo {
+ /// Host.
+ std::string host;
+ /// Port.
+ Connection::Port port;
+ };
+
+ /// Lista de información de conexiones de control.
+ typedef std::vector<ConnectionInfo> ConnectionInfoList;
+
// Atributos.
private:
/// Conexiones de control.
ConnectionList connections;
+ /// Mutex para las conexiones.
+ Glib::Mutex connections_mutex;
+
// Métodos.
private:
*
* \param port Puerto en el cual escuchar.
*/
- TCPServer(int port);
+ TCPServer(const Connection::Port& port);
+
+ /**
+ * Finaliza la tarea.
+ *
+ * \param attach Si es true, la función no retorna hasta que no
+ * finalice la tearea (no recomendable).
+ *
+ * \note Para saber cuando la tarea fue finalizada puede utilizar
+ * la señal signal_finished().
+ */
+ virtual void finish(bool attach = false);
/**
* Se encarga de borrar una conexión de la lista cuando finaliza.
*/
void on_connection_finished(Connection* connection);
+ /**
+ * Detiene una conexión.
+ */
+ bool disconnect(const std::string& host,
+ const Connection::Port& port);
+
+ /**
+ * Obtiene una lista conexiones de control abiertas.
+ */
+ ConnectionInfoList get_connected(void);
+
};
}