X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/212f9ae5dc8899bab8b23ed13d81c28c510db3c3..1855f998e5c0e51e2c1958724ac84cc13a87d84c:/Server/src/plant.cpp diff --git a/Server/src/plant.cpp b/Server/src/plant.cpp index 0e70a1f..1187c51 100644 --- a/Server/src/plant.cpp +++ b/Server/src/plant.cpp @@ -61,7 +61,8 @@ Plant::~Plant(void) { } } -Plant::Plant(const string& filename): simulator(filename), filename(filename) { +Plant::Plant(const string& filename): simulator(filename), filename(filename), + wait_time(DEFAULT_WAIT_TIME), paused(true) { #ifdef DEBUG cerr << __FILE__ << "(" << __LINE__ << ")" << ": constructor. filename = " << filename << endl; @@ -80,23 +81,31 @@ Plant::Plant(const string& filename): simulator(filename), filename(filename) { */ } -void Plant::real_run(void) { +void Plant::real_run(void) throw() { #ifdef DEBUG cerr << __FILE__ << "(" << __LINE__ << ")" << ": real_run." << endl; #endif // DEBUG + unsigned wait; 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(plantstatus); + if (paused) { // Si está pausada, espera un tiempo sin simular. + Glib::usleep(DEFAULT_WAIT_TIME); + } else { // Si está andando, simula y manda estado. + 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(plantstatus); + } + transmissions_mutex.unlock(); + wait_time_mutex.lock(); + wait = wait_time; + wait_time_mutex.unlock(); + Glib::usleep(wait); } - transmissions_mutex.unlock(); - Glib::usleep(100000); } } @@ -139,7 +148,7 @@ bool Plant::transmission_start(string& host, Connection::Port& port) { // return false; } transmissions.push_back(trans); - trans->signal_finished().connect(SigC::bind( + trans->signal_finished().connect(SigC::bind( SigC::slot_class(*this, &Plant::on_transmission_finished), trans)); trans->run(); @@ -201,10 +210,23 @@ const string Plant::get_xml(void) const { #endif // DEBUG ostringstream oss; ifstream ifs(filename.c_str()); + // XXX Saco la línea de definición de XML (), ver si esta hecho muy + // feo. + ifs.ignore(50, '\n'); // Ignora 50 caracteres o hasta un enter. ifs >> oss.rdbuf(); return oss.str(); } +void Plant::set_frequency(unsigned hz) { + Glib::Mutex::Lock lock(wait_time_mutex); + wait_time = hz ? (1000000u/hz) : DEFAULT_WAIT_TIME; +} + +void Plant::set_paused(bool paused_) { + Glib::Mutex::Lock lock(paused_mutex); + paused = paused_; +} + /* bool Plant::transmission_exists(const string& host, const Connection::Port& port) {