]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/src/plant.cpp
- Se corrige el bug que hacia que no se deje de transmitir con el comando
[z.facultad/75.42/plaqui.git] / Server / src / plant.cpp
index b01f1a51ee6c7c153eeda30b7964f9d90f5efdba..b020e2109e9882c4389bbe4405967c377825cb57 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "plaqui/server/plant.h"
 #include <glibmm/timer.h>
 
 #include "plaqui/server/plant.h"
 #include <glibmm/timer.h>
-#include <sigc++/slot.h>
+#include <sigc++/class_slot.h>
 #include <fstream>
 #ifdef DEBUG
 #      include <iostream>
 #include <fstream>
 #ifdef DEBUG
 #      include <iostream>
@@ -79,11 +79,12 @@ void Plant::real_run(void) {
        while (!stop) {
                simulator_mutex.lock();
                simulator.simulate();
        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++) {
                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);
                }
                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);
 //             return false;
        }
        transmissions.push_back(trans);
+       trans->signal_finished().connect(SigC::bind<Transmitter*>(
+                               SigC::slot_class(*this, &Plant::on_transmission_finished),
+                               trans));
        trans->run();
        host = trans->get_host();
        port = trans->get_port();
        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
 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();
 #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ó.
 }
 
        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__ << ")"
 bool Plant::set_open(const std::string& element, bool open) {
 #ifdef DEBUG
                cerr << __FILE__ << "(" << __LINE__ << ")"