From: Leandro Lucarella Date: Tue, 18 Nov 2003 21:06:55 +0000 (+0000) Subject: - Se arregla un semi-bug en el transmitter. X-Git-Tag: svn_import~259 X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/commitdiff_plain/a9d033a0a6748c192d30c9c65ebcc8b1a96cd43b?hp=6243f7da7604b2237018a1f02cb4baaaf207381a - Se arregla un semi-bug en el transmitter. - Se agrega comando /plant/get/ para obtener el XML se la planta. --- diff --git a/Server/include/plaqui/server/plant.h b/Server/include/plaqui/server/plant.h index 7709063..c6e64a6 100644 --- a/Server/include/plaqui/server/plant.h +++ b/Server/include/plaqui/server/plant.h @@ -48,11 +48,6 @@ namespace Server { /// Lista de conexiones de control. typedef std::list TransmitterList; - public: - - /// Tipo de señal para indicar que se actualizó la planta. - //typedef SigC::Signal0 SignalUpdated; - // Atributos. @@ -67,11 +62,8 @@ namespace Server { /// Simulador usado para calcular el estado de la planta. Model::Simulator simulator; - /// Señal para indicar que se actualizó la planta. - //SignalUpdated updated; - - /// Nombre de la planta. - //std::string name; + /// Nombre del archivo donde esta el XML de la planta. + std::string filename; // Métodos. @@ -103,8 +95,7 @@ namespace Server { * * \return true si comenzó la transmisión, false si hubo problemas. */ - bool transmission_start(const string& host, - const Connection::Port& port); + bool transmission_start(string& host, Connection::Port& port); /** * Comienza una transmisión del estado de la planta. @@ -115,9 +106,9 @@ namespace Server { const Connection::Port& port); /** - * Obtiene la señal para indicar que se actualizó la planta. + * Obtiene el XML de la planta. */ - //SignalUpdated& signal_updated(void); + const std::string get_xml(void) const; }; diff --git a/Server/include/plaqui/server/server.h b/Server/include/plaqui/server/server.h index 75fbfda..21a1958 100644 --- a/Server/include/plaqui/server/server.h +++ b/Server/include/plaqui/server/server.h @@ -112,6 +112,11 @@ namespace Server { */ HTTPResponse* cmd_plant_list(void); + /** + * Maneja el comando plant/get. + */ + HTTPResponse* cmd_plant_get(const Command& command); + /** * Maneja el comando plant/stop. */ diff --git a/Server/include/plaqui/server/transmitter.h b/Server/include/plaqui/server/transmitter.h index 87b0bd2..211a31e 100644 --- a/Server/include/plaqui/server/transmitter.h +++ b/Server/include/plaqui/server/transmitter.h @@ -58,11 +58,13 @@ namespace Server { /** * Constructor. * + * Los parámetros son modificados por los valores reales que toma + * una vez conectado. + * * \param host Host al cual transmitir. * \param port Puerto al cual transmitir. */ - Transmitter(const std::string& _host = "localhost", - const Connection::Port& _port = 7528); + Transmitter(std::string& _host, Connection::Port& _port); /** * Envia datos. diff --git a/Server/src/plant.cpp b/Server/src/plant.cpp index c56035c..69ce671 100644 --- a/Server/src/plant.cpp +++ b/Server/src/plant.cpp @@ -28,6 +28,9 @@ #include "plaqui/server/plant.h" #include #include +#include +#include +#include #ifdef DEBUG # include #endif // DEBUG @@ -50,7 +53,7 @@ Plant::~Plant(void) { } } -Plant::Plant(const string& filename): simulator(filename) { +Plant::Plant(const string& filename): simulator(filename), filename(filename) { #ifdef DEBUG cerr << __FILE__ << ": constructor. filename = " << filename << endl; #endif // DEBUG @@ -83,8 +86,7 @@ void Plant::real_run(void) { } } -bool Plant::transmission_start(const string& host, - const Connection::Port& port) { +bool Plant::transmission_start(string& host, Connection::Port& port) { Glib::Mutex::Lock lock(transmissions_mutex); for (TransmitterList::iterator i = transmissions.begin(); i != transmissions.end(); i++) { @@ -117,6 +119,19 @@ bool Plant::transmission_stop(const string& host, return false; // No la encontró. } +const string Plant::get_xml(void) const { + ostringstream oss; + try { + ifstream ifs(filename.c_str()); + ifs >> noskipws; + copy(istream_iterator(ifs), istream_iterator(), + ostream_iterator(oss)); + } catch (...) { // TODO hacerlo mas selectivo? + return ""; + } + return oss.str(); +} + /* bool Plant::transmission_exists(const string& host, const Connection::Port& port) { diff --git a/Server/src/server.cpp b/Server/src/server.cpp index 837295f..bb66fe5 100644 --- a/Server/src/server.cpp +++ b/Server/src/server.cpp @@ -143,6 +143,8 @@ void Server::on_control_command_received(const Command& command, } else if (command.get_target() == "plant") { if (command.get_command() == "list") { response = cmd_plant_list(); + } else if (command.get_command() == "get") { + response = cmd_plant_get(command); } else if (command.get_command() == "stop") { response = cmd_plant_stop(command); } else { @@ -260,10 +262,10 @@ HTTPResponse* Server::cmd_transmission_list(void) { response_xml << "

versión 0.8

" << endl; response_xml << "

Lista de transmisiones:

" << endl; response_xml << "