]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/src/conduct.cpp
Se termina de poner prolijo Runnable:
[z.facultad/75.42/plaqui.git] / Model / src / conduct.cpp
1
2 #include "conduct.h"
3
4 using namespace PlaQui::Model;
5
6 Conduct::Conduct(const std::string &_name):Transport(_name)
7 {
8         max_flow = 0.0f;
9
10         // Inicio los parametros de conectores
11         in_slots = 1;
12         out_slots = 1;
13         actual_flow = 99999;
14 }
15
16 Conduct::~Conduct()
17 {
18 }
19
20 void Conduct::recieve_msg(int msg, IConector *who, void *data)
21 {
22         switch (msg) {
23                 case MSG_QUERY_MAX_FLOW_OUT: {
24                         // Me preguntan por el flujo máximo.
25                         // Primero me actualizo, y luego respondo
26                         float tmp = *((float *)data);
27                         actual_flow = (actual_flow>max_flow)?max_flow:actual_flow;
28                         actual_flow = (actual_flow<tmp)?actual_flow:tmp;
29
30                         send_msg(OUT, MSG_QUERY_MAX_FLOW_OUT, &actual_flow);
31                         who->recieve_msg(MSG_RESPONSE_MAX_FLOW, this, &actual_flow);
32                         updated = true;
33                 }
34                 break;
35                 case MSG_RESPONSE_MAX_FLOW: {
36                         float max = *((float *)data);
37                         // Actualizo mi flujo en base a la respuesta
38                         if (max < actual_flow) {
39                                 actual_flow = max;
40                         }
41                 }
42                 break;
43                 default:
44                         Transport::recieve_msg(msg, who, data);
45         }
46 }
47
48 void Conduct::update(int dir)
49 {
50         // Si ya me actualice, no lo tengo que hacer de nuevo
51         if (updated) return;
52         // Seteo mi actualizar en true para evitar entrar de nuevo
53         actual_flow = 99999;
54         updated = true;
55         actual_flow = max_flow;
56         send_msg(OUT, MSG_QUERY_MAX_FLOW_OUT, (void *)&actual_flow);
57 }
58
59 void Conduct::simulate()
60 {
61         if (!updated) {
62                 std::cout << name << "::sin actualizar!" << std::endl;
63                 return;
64         }
65
66         std::list<IConector *>::iterator i = in_list.begin();
67         if (i != in_list.end()) {
68                 PlantItem *o = (PlantItem *)(*i);
69                 set_color( o->get_color() );
70         }
71         std::cout << name << "::Flujo actual = " << actual_flow << " de " << max_flow << std::endl;
72         updated = false;
73 }
74
75