]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/src/conduct.cpp
Se completa bastante el model y se crea un ejemplo que al parecer funciona
[z.facultad/75.42/plaqui.git] / Model / src / conduct.cpp
1
2 #include "conduct.h"
3 #include <iostream>
4
5 using namespace PlaQui::Model;
6
7 Conduct::Conduct(const std::string &_name):Transport(_name)
8 {
9         max_flow = actual_flow = 0.0f;
10
11         // Inicio los parametros de conectores
12         in_slots = 1;
13         out_slots = 1;
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: {
24                         // Me preguntan por el flujo máximo.
25                         // Primero me actualizo, y luego respondo
26                         update();
27                         float tmp = (actual_flow>max_flow)?max_flow:actual_flow;
28                         // FIXME : no tiene que ir
29                         if (out_list.size() == 0) tmp = max_flow;
30                         who->recieve_msg(MSG_RESPONSE_MAX_FLOW, this, &tmp);
31                 }
32                 break;
33                 case MSG_RESPONSE_MAX_FLOW: {
34                         float max = *((float *)data);
35                         // Actualizo mi flujo en base a la respuesta
36                         if (max < actual_flow) {
37                                 actual_flow = max;
38                         }
39                 }
40                 break;
41                 default:
42                         Transport::recieve_msg(msg, who, data);
43         }
44 }
45
46 void Conduct::update()
47 {
48         // Si ya me actualice, no lo tengo que hacer de nuevo
49         if (updated) return;
50         // Seteo mi actualizar en true para evitar entrar de nuevo
51         actual_flow = 99999;
52         updated = true;
53         send_msg(IN, MSG_QUERY_MAX_FLOW);
54         send_msg(OUT, MSG_QUERY_MAX_FLOW);
55 }
56
57 void Conduct::simulate()
58 {
59         if (!updated) {
60                 return;
61         }
62
63         std::cout << name << "::Flujo actual = " << actual_flow << std::endl;
64         updated = false;
65 }
66