]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Server/include/plaqui/server/server.h
* Se agrega el TIP de luca
[z.facultad/75.42/plaqui.git] / Server / include / plaqui / server / server.h
1 // vim: set noexpandtab tabstop=4 shiftwidth=4:
2 //----------------------------------------------------------------------------
3 //                                  PlaQui
4 //----------------------------------------------------------------------------
5 // This file is part of PlaQui.
6 //
7 // PlaQui is free software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the Free Software
9 // Foundation; either version 2 of the License, or (at your option) any later
10 // version.
11 //
12 // PlaQui is distributed in the hope that it will be useful, but WITHOUT ANY
13 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
15 // details.
16 //
17 // You should have received a copy of the GNU General Public License along
18 // with PlaQui; if not, write to the Free Software Foundation, Inc., 59 Temple
19 // Place, Suite 330, Boston, MA  02111-1307  USA
20 //----------------------------------------------------------------------------
21 // Creado:  Sat Oct 18 18:18:36 2003
22 // Autores: Leandro Lucarella <llucare@fi.uba.ar>
23 //----------------------------------------------------------------------------
24 //
25 // $Id$
26 //
27
28 #ifndef PLAQUI_SERVER_H
29 #define PLAQUI_SERVER_H
30
31 #include "plaqui/server/tcpserver.h"
32 #include "plaqui/server/controlserver.h"
33 //#include "plaqui/server/transmitter.h"
34 #include "plaqui/server/plant.h"
35 #include "plaqui/server/command.h"
36 #include "plaqui/server/response.h"
37 #include <socket++/sockinet.h>
38 #include <string>
39 #include <map>
40
41 namespace PlaQui {
42
43 namespace Server {
44
45         /**
46          * Servidor de plantas químicas.
47          * Maneja múltiples conexiones, de control o de transmisión.
48          */
49         class Server: public TCPServer {
50
51                 /////////////////////////////////////////////////////////////////////
52                 // Tipos.
53
54                 private:
55
56                         /// Lista de plantas químicas.
57                         typedef std::map<std::string, Plant*> PlantList;
58
59                 /////////////////////////////////////////////////////////////////////
60                 // Atributos.
61
62                 private:
63
64                         // Plantas disponibles en el servidor.
65                         PlantList plants;
66
67                         /// Mutex para las plantas.
68                         Glib::Mutex plants_mutex;
69
70                 /////////////////////////////////////////////////////////////////////
71                 // Métodos.
72
73                 protected:
74
75                         /**
76                          * Obtiene una nueva \ref Connection "conexión".
77                          *
78                          * \param sd Descriptor del socket de la nueva conexión.
79                          *
80                          * \return Nueva conexión.
81                          */
82                         virtual Connection* new_connection(const sockbuf::sockdesc& sd);
83
84                         /**
85                          * Maneja el comando server/info.
86                          */
87                         Response* cmd_server_info(void) const;
88
89                         /**
90                          * Maneja el comando connection/list.
91                          */
92                         Response* cmd_connection_list(void);
93
94                         /**
95                          * Maneja el comando connection/stop.
96                          */
97                         Response* cmd_connection_stop(const Command& command);
98
99                         /**
100                          * Maneja el comando transmission/list.
101                          */
102                         Response* cmd_transmission_list(void);
103
104                         /**
105                          * Maneja el comando transmission/start.
106                          */
107                         Response* cmd_transmission_start(const Command& command);
108
109                         /**
110                          * Maneja el comando transmission/stop.
111                          */
112                         Response* cmd_transmission_stop(const Command& command);
113
114                         /**
115                          * Maneja el comando plant/list.
116                          */
117                         Response* cmd_plant_list(void);
118
119                         /**
120                          * Maneja el comando plant/get.
121                          */
122                         Response* cmd_plant_get(const Command& command);
123
124                         /**
125                          * Maneja el comando plant/set.
126                          */
127                         Response* cmd_plant_set(const Command& command);
128
129                         /**
130                          * Maneja el comando plant/set_frequency.
131                          */
132                         Response* cmd_plant_set_frequency(const Command& command);
133
134                         /**
135                          * Maneja el comando plant/start.
136                          */
137                         Response* cmd_plant_start(const Command& command);
138
139                         /**
140                          * Maneja el comando plant/stop.
141                          */
142                         Response* cmd_plant_stop(const Command& command);
143
144                         /**
145                          * Maneja el comando plant/remove.
146                          */
147                         Response* cmd_plant_remove(const Command& command);
148
149                 public:
150
151                         /**
152                          * Destructor.
153                          */
154                         virtual ~Server(void);
155
156                         /**
157                          * Constructor.
158                          *
159                          * \param port Puerto en el cual escuchar.
160                          */
161                         Server(const Connection::Port& port = 7522) throw(sockerr);
162
163                         /**
164                          * Agrega una planta al servidor.
165                          *
166                          * \param name     Nombre que utilizará el servidor para identificar
167                          *                 a la planta.
168                          * \param filename Nombre del archivo con la planta a cargar.
169                          * \return true si se agregó la planta, false si ya existía una
170                          *         planta con ese nombre.
171                          */
172                         bool add_plant(const std::string& name,
173                                         const std::string& filename);
174
175                         /**
176                          * Maneja los comandos recibidos por las conexiones.
177                          */
178                         void on_control_command_received(const Command& command,
179                                         ControlServer* controlserver);
180
181                         /**
182                          * Se encarga de borrar una planta de la lista cuando finaliza.
183                          *
184                          * \param plant Nombre de la planta a elminar.
185                          */
186                         void on_plant_finished(const char* plant);
187
188         };
189
190 }
191
192 }
193
194 #endif // PLAQUI_SERVER_H