X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/7e74b790d290cd7d776349503bb361c47933c01f..e46a2c7e43af9156a434d9cf41c2beb5b25b36d1:/Server/src/plant.cpp?ds=sidebyside diff --git a/Server/src/plant.cpp b/Server/src/plant.cpp index b01f1a5..b020e21 100644 --- a/Server/src/plant.cpp +++ b/Server/src/plant.cpp @@ -27,7 +27,7 @@ #include "plaqui/server/plant.h" #include -#include +#include #include #ifdef DEBUG # include @@ -79,11 +79,12 @@ void Plant::real_run(void) { while (!stop) { simulator_mutex.lock(); simulator.simulate(); + string plantstatus = simulator.get_state_as_xml(); simulator_mutex.unlock(); transmissions_mutex.lock(); for (TransmitterList::iterator i = transmissions.begin(); i != transmissions.end(); i++) { - (*i)->send(simulator.get_state_as_xml()); + (*i)->send(plantstatus); } transmissions_mutex.unlock(); Glib::usleep(1000000); @@ -129,6 +130,9 @@ bool Plant::transmission_start(string& host, Connection::Port& port) { // return false; } transmissions.push_back(trans); + trans->signal_finished().connect(SigC::bind( + SigC::slot_class(*this, &Plant::on_transmission_finished), + trans)); trans->run(); host = trans->get_host(); port = trans->get_port(); @@ -138,9 +142,9 @@ bool Plant::transmission_start(string& host, Connection::Port& port) { bool Plant::transmission_stop(const string& host, const Connection::Port& port) { #ifdef DEBUG - cerr << __FILE__ << "(" << __LINE__ << ")" - << ": transmission_stop(host = " << host << - ", port = " << port << ")." << endl; + cerr << __FILE__ << "(" << __LINE__ << ")" + << ": transmission_stop(host = " << host << + ", port = " << port << ")." << endl; #endif // DEBUG Glib::Mutex::Lock lock(transmissions_mutex); for (TransmitterList::iterator i = transmissions.begin(); @@ -153,6 +157,24 @@ bool Plant::transmission_stop(const string& host, return false; // No la encontrĂ³. } +void Plant::on_transmission_finished(Transmitter* transmission) { +#ifdef DEBUG + cerr << __FILE__ << "(" << __LINE__ << ")" + << ": on_transmission_finished(transmission = " + << transmission << ")" << endl; +#endif // DEBUG + Glib::Mutex::Lock lock(transmissions_mutex); + transmissions.remove(transmission); +#ifdef DEBUG + cerr << __FILE__ << "(" << __LINE__ << ")" + << ": lista de conexiones" << endl; + for (TransmitterList::const_iterator i = transmissions.begin(); + i != transmissions.end(); i++) { + cerr << "\t " << *i << endl; + } +#endif // DEBUG +} + bool Plant::set_open(const std::string& element, bool open) { #ifdef DEBUG cerr << __FILE__ << "(" << __LINE__ << ")"