}
}
+ xmlFreeDoc(document);
+
// Ya cargado el XML, mando un msg para empezar a recibir los frames!
PlaQui::Server::Command c("transmission", "start");
c.add_arg("default");
items = items->next;
}
+ xmlFreeDoc(document);
// Actualizo la UI
update_ui();
}
* a la salida.
* \param where Donde enviar el mensage, IConector::IN o IConector::OUT
* \param msg Mensage a enviar
- * \param data dato opcional a mandar, según el mensage que se envíe
+ * \param data Dato opcional a mandar, según el mensage que se envíe
*/
void send_msg(int where, int msg, void *data=NULL);
* de evitar solapamiento de mensajes.
* Por ejemplo, si tenemos una clase B con un mensaje TEST se declararía
* como :
- * \verbatim
+ * \code
* class B:public IConector {
* enum {
* MSG_TEST=IConector::MSG_LAST,
* MSG_LAST
* };
- * \endverbatim
+ * \endcode
*/
enum {
MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje
/// Destructor
virtual ~PlantItem();
- // FIXME: ver que parametros seran necesarios
- // TODO : ver si no son inutiles!!!
- virtual void send_fluid() {}
- virtual void receive_fluid() {}
-
/** Ejecuta la fase de actualización.
*
* Durante la fase de actualización los objetos se comunican entre
/// Retorna el flujo actual que maneja el objeto.
float get_actual_flow() { return actual_flow; }
+
+ /** Genera la salida XML del estado del componente
+ *
+ * Esta función genera el estado actual de un objeto utilizando
+ * el formato XML
+ */
virtual void get_state_as_xml(std::stringstream &out);
protected:
RGB fluid_color;
enum {PUMP, UNION, SPLITTER, CONDUCT, EXCLUSA, TANK, DRAINAGE};
bool set_open(const std::string &name, bool open = true);
+
+ /// Dice si el simulador está simulando una planta
+ bool is_ok() { return is_load_ok; }
protected:
// Los mantengo en listas separadas para ahorrar
// CPU y no tener que usar dinamic_cast
// Frame. Define el orden para los cuadros del XML
unsigned long int frame;
+ bool is_load_ok;
};
}
void Conduct::simulate()
{
if (!updated) {
+#ifdef DEBUG
std::cout << name << "::sin actualizar!" << std::endl;
+#endif
return;
}
PlantItem *o = (PlantItem *)(*i);
set_color( o->get_color() );
}
+#ifdef DEBUG
std::cout << name << "::Flujo actual = " << actual_flow << " de " << max_flow << std::endl;
+#endif
updated = false;
}
PlantItem *o = (PlantItem *)(*i);
set_color( o->get_color() );
}
+#ifdef DEBUG
std::cout << name << "::Flujo recibido = " << actual_flow << std::endl;
+#endif
updated = false;
actual_flow = 0;
}
PlantItem *o = (PlantItem *)(*i);
set_color( o->get_color() );
}
+#ifdef DEBUG
std::cout << name << ": " << ((is_open)?"Abierta":"Cerrada") << std::endl;
+#endif
}
void Exclusa::recieve_msg(int msg, IConector *who, void *data)
void Pump::simulate()
{
+#ifdef DEBUG
std::cout << ((active && open)?" (funcionando)":" (apagada)") << std::endl;
+#endif
updated = false;
}
xmlDocPtr document;
document = xmlParseFile(filename.c_str());
if (document == NULL) {
+ is_load_ok = false;
return;
}
+ is_load_ok = true;
+
/* bien, el archivo se parseo bien! */
xmlNodePtr nodo, items;
nodo = document->children;
// Bien, la planta esta cargada, conectemos todo!!
do_connections(nodo->children);
}
+ xmlFreeDoc(document);
}
Simulator::~Simulator()
{
- // FIXME REMOVER TODOOOOOO
+ std::list<PlantItem *>::iterator i = items.begin();
+ PlantItem *o;
+
+ while (i != items.end()) {
+ o = (*i);
+ items.remove(o);
+ delete o;
+ i = items.begin();
+ }
}
void Simulator::add_pump(const std::string &name, float max_flow, RGB color)
{
Pump *p = new Pump(name);
- // FIXME no va!!
p->set_max_flow(max_flow);
p->set_color(color);
pump_lst.push_back(p);
void Simulator::add_union(const std::string &name, float max_flow)
{
Union *u = new Union(name);
- // FIXME no va!!
u->set_max_flow(max_flow);
union_lst.push_back(u);
items.push_back(u);
void Simulator::add_conduct(const std::string &name, float flujo)
{
Conduct *p = new Conduct(name);
- // FIXME no va!!
- std::cout << flujo << std::endl;
p->set_max_flow(flujo);
conduct_lst.push_back(p);
items.push_back(p);
void Source::simulate()
{
+#ifdef DEBUG
std::cout << name << "::Flujo entregado : " << max_flow << std::endl;
+#endif
}
break;
case MSG_RESPONSE_MAX_FLOW: {
float max = *((float *)data);
+#ifdef DEBUG
std::cout << name << ":Split " << max << std::endl;
+#endif
if (pos == OUT) {
if (max < actual_flow) actual_flow = max;
if (max_flow < actual_flow) actual_flow = max_flow;
PlantItem *o = (PlantItem *)(*i);
set_color( o->get_color() );
}
+#ifdef DEBUG
std::cout << name << "::Flujo actual = " << actual_flow << std::endl;
+#endif
updated = false;
}
// le resto lo que entrego
litros -= actual_out_flow;
+#ifdef DEBUG
std::cout << name << "Capacidad: " << capacity;
std::cout << " Litros : " << litros << std::endl;
+#endif
updated = false;
}
}
}
+#ifdef DEBUG
std::cout << name << "::Flujo actual = " << actual_flow << std::endl;
+#endif
updated = false;
in_on_zero = 0;
in_ready = 0;