1 // vim: set noexpandtab tabstop=4 shiftwidth=4:
2 //----------------------------------------------------------------------------
4 //----------------------------------------------------------------------------
5 // This file is part of PlaQui.
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
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
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: dom nov 16 13:03:33 ART 2003
22 // Autores: Leandro Lucarella <llucare@fi.uba.ar>
23 //----------------------------------------------------------------------------
28 #include "plaqui/server/plant.h"
29 #include <glibmm/timer.h>
30 #include <sigc++/slot.h>
43 cerr << __FILE__ << ": destructor." << endl;
45 // Termino transmisiones.
46 Glib::Mutex::Lock lock(transmissions_mutex);
47 for (TransmitterList::iterator trans = transmissions.end();
48 trans != transmissions.end(); trans++) {
49 (*trans)->finish(true);
53 Plant::Plant(const string& filename): simulator(filename) {
55 cerr << __FILE__ << ": constructor. filename = " << filename << endl;
58 /* simulator.add_pump("bomba1");
59 simulator.add_conduct("c");
60 simulator.add_conduct("c1");
61 simulator.add_drainage("d");
62 simulator.add_tank("tanque");
64 simulator.connect("bomba1", "c", Model::IConector::OUT);
65 simulator.connect("c", "tanque", Model::IConector::OUT);
66 simulator.connect("tanque", "c1", Model::IConector::OUT);
67 simulator.connect("c1", "d", Model::IConector::OUT);
71 void Plant::real_run(void) {
73 cerr << __FILE__ << ": real_run." << endl;
77 Glib::Mutex::Lock lock(transmissions_mutex);
78 for (TransmitterList::iterator i = transmissions.begin();
79 i != transmissions.end(); i++) {
80 (*i)->send(simulator.get_state_as_xml());
82 Glib::usleep(1000000);
86 bool Plant::transmission_start(const string& host,
87 const Connection::Port& port) {
88 Glib::Mutex::Lock lock(transmissions_mutex);
89 for (TransmitterList::iterator i = transmissions.begin();
90 i != transmissions.end(); i++) {
91 if (((*i)->get_host() == host) && ((*i)->get_port() == port)) {
97 trans = new Transmitter(host, port);
98 } catch (...) { // TODO - Hace mas selectivo el catch?
102 transmissions.push_back(trans);
107 bool Plant::transmission_stop(const string& host,
108 const Connection::Port& port) {
109 Glib::Mutex::Lock lock(transmissions_mutex);
110 for (TransmitterList::iterator i = transmissions.begin();
111 i != transmissions.end(); i++) {
112 if (((*i)->get_host() == host) && ((*i)->get_port() == port)) {
117 return false; // No la encontró.
121 bool Plant::transmission_exists(const string& host,
122 const Connection::Port& port) {
123 Glib::Mutex::Lock lock(transmissions_mutex);
124 for (TransmitterList::const_iterator i = transmissions.begin();
125 i != transmissions.end(); i++) {
126 if (((*i)->get_host() == host) && ((*i)->get_oprt() == port)) {
130 return false; // No la encontró.
134 //const std::string& Plant::get_name(void) const {
138 /// \todo FIXME esto deberia estar protegido por un mutex.
139 //Plant::SignalUpdated& Plant::signal_updated(void) {
143 } // namespace Server
145 } // namespace PlaQui