+// vim: set noexpandtab tabstop=4 shiftwidth=4:
+//----------------------------------------------------------------------------
+// PlaQui
+//----------------------------------------------------------------------------
+// This file is part of PlaQui.
+//
+// PlaQui is free software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the Free Software
+// Foundation; either version 2 of the License, or (at your option) any later
+// version.
+//
+// PlaQui is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+// details.
+//
+// You should have received a copy of the GNU General Public License along
+// with PlaQui; if not, write to the Free Software Foundation, Inc., 59 Temple
+// Place, Suite 330, Boston, MA 02111-1307 USA
+//----------------------------------------------------------------------------
+// Creado: Sat Oct 18 18:18:36 2003
+// Autores: Leandro Lucarella <llucare@fi.uba.ar>
+//----------------------------------------------------------------------------
+//
+// $Id$
+//
+
+#ifndef PLAQUI_SERVER_H
+#define PLAQUI_SERVER_H
+
+#include "controlserver.h"
+#include "transmitter.h"
+#include <socket++/sockinet.h>
+#include <string>
+#include <list>
+
+namespace Plaqui {
+
+ /**
+ * Servidor de plantas químicas.
+ * Maneja muchas conexiones, de control o de transmisión.
+ */
+ class Server: public Runnable {
+
+ private:
+
+ /// Lista de conexiones de control.
+ typedef std::list<ControlServer*> ControllerList;
+
+ /// Lista de conexiones de control.
+ typedef std::list<Transmitter*> TransmitterList;
+
+ /// Socket para escuchar conexiones.
+ sockbuf socket;
+
+ /// Conexiones de control.
+ ControllerList controllers;
+
+ /// Transmisiones del estado de las plantas.
+ TransmitterList transmissions;
+
+ public:
+
+ /**
+ * Destructor.
+ */
+ virtual ~Server(void) {}
+
+ /**
+ * Constructor.
+ *
+ * \param port Puerto en el cual escuchar.
+ */
+ Server(int port = 7522);
+
+ /**
+ * Comienza la transimisión del estado de una planta.
+ *
+ * \param host Host al cual se quiere transmitir.
+ * \param port Puerto al cual transmitir.
+ *
+ * \return true si se pudo empezar a transmitir, false si no.
+ *
+ * \todo Ver si es necesario que devuelva algo y si devuelve ver si
+ * no sería mejor que dé más información (si no se pudo abrir
+ * o si ya estaba abierto por ejemplo.
+ */
+ bool start_transmission(std::string host = "localhost",
+ int port = 7528);
+
+ /**
+ * Finaliza la transimisión del estado de una planta.
+ *
+ * \param host Host al cual se quiere dejar de transmitir.
+ * \param port Puerto al cual dejar de transmitir.
+ *
+ * \return true si se pudo empezar a transmitir, false si no.
+ *
+ * \todo Ver si es necesario que devuelva algo y si devuelve ver si
+ * no sería mejor que dé más información (si no se pudo abrir
+ * o si ya estaba abierto por ejemplo.
+ */
+ bool stop_transmission(std::string host = "localhost",
+ int port = 7528);
+
+ };
+
+}
+
+#endif // PLAQUI_SERVER_H