]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/src/bomb.cpp
9bae0a50c3c893922a99e9e1e9f8f064cd6db134
[z.facultad/75.42/plaqui.git] / Model / src / bomb.cpp
1
2 #include "bomb.h"
3 #include <iostream>
4
5 using namespace PlaQui::Model;
6
7 Bomb::Bomb(const std::string &_name):Source(_name)
8 {
9         in_slots = 0;
10         out_slots = 1;
11         active = true;
12         open = true;
13         max_flow = 1;
14 }
15
16 Bomb::~Bomb()
17 {
18 }
19
20 void Bomb::update()
21 {
22         if (updated) return;
23         updated = true;
24         send_msg(OUT, MSG_QUERY_MAX_FLOW);
25 }
26
27 void Bomb::simulate()
28 {
29         std::cout << name << "::Flujo entregado = " << (active && open)?max_flow:0;
30         std::cout << ((active && open)?" (funcionando)":" (apagada)") << std::endl;
31 }
32
33 bool Bomb::get_output()
34 {
35         /* Si el corte fue manual, no puedo hacer nada */
36         if (active == false) return false;
37
38         /* Si no, depende del control automatico */
39         return open;
40 }
41
42 void Bomb::recieve_msg(int msg, IConector *who, void *data)
43 {
44         switch (msg) {
45                 case MSG_QUERY_MAX_FLOW: {
46                         // Me preguntan por el flujo máximo.
47                         // Primero me actualizo, y luego respondo
48                         update();
49                         float tmp = (active && open)?max_flow:0;
50                         who->recieve_msg(MSG_RESPONSE_MAX_FLOW, this, &tmp);
51                 }
52                 break;
53                 case MSG_RESPONSE_MAX_FLOW: {
54                         max_flow = *((float *)data);
55                 }
56                 break;
57                 default:
58                         Source::recieve_msg(msg, who, data);
59         }
60
61 }
62