]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
- Se corrige el bug que hacia que no se deje de transmitir con el comando
authorLeandro Lucarella <llucax@gmail.com>
Thu, 20 Nov 2003 07:24:09 +0000 (07:24 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Thu, 20 Nov 2003 07:24:09 +0000 (07:24 +0000)
  /transmission/stop/.
- Aparentemente tambien se arregla el bug de desconexion del cliente (pero no
  estoy seguro, despues de cambiar varias cosas creo que al final quedo como al
  principio).

Server/include/plaqui/server/plant.h
Server/include/plaqui/server/transmitter.h
Server/src/plant.cpp
Server/src/runnable.cpp
Server/src/transmitter.cpp
Server/tests/server_test.cpp

index 78dea2f28553e45bb2e3d477f3cf4d3eb7f95256..31aea96814261077799404d2c619c2c35a8e5341 100644 (file)
@@ -112,7 +112,7 @@ namespace Server {
                         *
                         * \param transmission Transmisión a eliminar.
                         */
-                       bool on_transmission_finished(Transmitter* transmission);
+                       void on_transmission_finished(Transmitter* transmission);
 
                        /**
                         * Abre (o cierra) un elemento de la planta.
index 3e99f414fd14e26a005b19460968f65d65d85bb0..acf38e89b294d2fe5d1471de16f05381d752dcea 100644 (file)
@@ -29,7 +29,6 @@
 #define PLAQUI_TRANSMITTER_H
 
 #include "plaqui/server/connection.h"
-//#include "plaqui/server/plant.h"
 #include <string>
 
 namespace PlaQui {
index ce9f737d19822eba5ba4dac9d74875f36a9c8a64..b020e2109e9882c4389bbe4405967c377825cb57 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "plaqui/server/plant.h"
 #include <glibmm/timer.h>
-#include <sigc++/slot.h>
+#include <sigc++/class_slot.h>
 #include <fstream>
 #ifdef DEBUG
 #      include <iostream>
@@ -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<Transmitter*>(
+                               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,7 +157,7 @@ bool Plant::transmission_stop(const string& host,
        return false; // No la encontró.
 }
 
-bool Plant::on_transmission_finished(Transmitter* transmission) {
+void Plant::on_transmission_finished(Transmitter* transmission) {
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")"
                <<  ": on_transmission_finished(transmission = "
index c134b834fbe0709a0314b241a72d93b9cce74661..d9d5048ecbacf0dea076a3c43ab22251e7c317dc 100644 (file)
@@ -61,6 +61,7 @@ void Runnable::static_run(Runnable* runner) {
 #endif // DEBUG
        runner->real_run();
        runner->finished();
+       //runner->thread->join();
        delete runner;
 }
 
@@ -75,7 +76,7 @@ void Runnable::run(bool detach) {
                // finalizar, pasandole el puntero al objeto.
                thread = Glib::Thread::create(
                                SigC::bind<Runnable*>(SigC::slot(&Runnable::static_run), this),
-                               true);
+                               true);//false);
        // Si no corremos la tarea normalmente.
        } else {
                real_run();
index b59992edfd6c44dd584b45ac041034a5f2537d34..6ab9260ae3a3267b81e81ef7c9f7bd8b83ac9890 100644 (file)
@@ -78,8 +78,9 @@ void Transmitter::real_run(void) {
 
 void Transmitter::send(const string& data) {
 #ifdef DEBUG
-       cerr << __FILE__ << "(" << __LINE__ << ")"
-               << ": send(data = " << data << ")." << endl;
+       cerr << __FILE__ << "(" << __LINE__ << ")" 
+               << ": send()." << endl;
+//             << ": send(data = " << data << ")." << endl;
 #endif // DEBUG
        if (stop) {
                return;
index 25d01a676dcbaf258cd9ab1222c02b58790775fe..1f505eef20a2a520d2dcf8bc38e32ecfc409ea82 100644 (file)
 #include "plaqui/server/server.h"
 #include "plaqui/server/string.h"
 #include <socket++/sockinet.h>
+#include <glibmm/timer.h>
 #include <iostream>
 #include <exception>
 
 using namespace std;
 using namespace PlaQui::Server;
 
+Server* server = NULL;
+
 void on_error(const Runnable::Error& code, const string& desc) {
        cerr << "--------------------------------------------------------" << endl;
        cerr << "Error en el servidor:" << endl;
@@ -43,6 +46,11 @@ void on_error(const Runnable::Error& code, const string& desc) {
        cerr << "--------------------------------------------------------" << endl;
 }
 
+void on_finished(void) {
+       cerr << "Murió el servidor!" << endl;
+       server = NULL;
+}
+
 int main(int argc, char* argv[]) {
 
        // Termina con mas informacion si hay una excepcion no manejada.
@@ -68,7 +76,6 @@ int main(int argc, char* argv[]) {
        // Inicializa threads.
        Glib::thread_init();
 
-       Server* server = NULL;
        try {
                // Crea el server (empieza a escuchar).
                server = new Server(filename, port);
@@ -108,8 +115,13 @@ int main(int argc, char* argv[]) {
        // Corre el server.
        server->run(false);
 
+       // Espera a que el server se muera.
+       while (server) {
+               Glib::usleep(1000000);
+       }
+
        // Como no detachee el server, lo tengo que eliminar a mano.
-       delete server;
+       //delete server;
 
        return 0;
 }