]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/src/plantitem.cpp
Se arregla el bug que hacia que el cliente levante mal archivos XML grandes.
[z.facultad/75.42/plaqui.git] / Model / src / plantitem.cpp
1
2 #include "plantitem.h"
3 #include <iostream>
4
5 using namespace PlaQui::Model;
6
7 PlantItem::PlantItem(const std::string &_name):IConector(0, 0)
8 {
9         name = _name;
10         updated = false;
11         fluid_color = RGB(255,255,255);
12         color_updated = false;
13 }
14
15 PlantItem::PlantItem(unsigned ins, unsigned outs):IConector(ins, outs)
16 {
17         updated = false;
18 }
19
20 PlantItem::~PlantItem()
21 {
22 }
23         
24 void PlantItem::recieve_msg(int msg, IConector *who, void *data)
25 {
26         switch (msg) {
27                 case MSG_QUERY_MAX_FLOW_OUT:
28                         // TODO
29                         return;
30                 break;
31                 case MSG_QUERY_COLOR:
32                         if (color_updated) {
33                                 who->recieve_msg(MSG_RESPONSE_COLOR, this, &fluid_color);
34                                 return;
35                         }
36                         update_color();
37                         who->recieve_msg(MSG_RESPONSE_COLOR, this, &fluid_color);
38                 break;
39                 case MSG_RESPONSE_COLOR:
40                 {
41                         RGB *c = ((RGB *)data);
42                         set_color(*c);
43                 }
44                 break;
45                 default:
46                         IConector::recieve_msg(msg, who, data);
47         }
48 }
49
50 void PlantItem::update_color()
51 {
52         if (color_updated) return;
53
54         color_updated = true;
55         send_msg(IConector::IN, MSG_QUERY_COLOR);
56 }
57
58 void PlantItem::get_state_as_xml(std::stringstream &out)
59 {
60         out << "\t<float name=\"" << name << "\">" << std::endl;
61         out << "\t\t<actual_flow>" << actual_flow << "</actual_flow>" << std::endl;
62         out << "\t</float>" << std::endl;
63         out << "\t<color name=\"" << name << "\">" << std::endl;
64         out << "\t\t<r>" << fluid_color.r() << "</r>" << std::endl;
65         out << "\t\t<g>" << fluid_color.g() << "</g>" << std::endl;
66         out << "\t\t<b>" << fluid_color.b() << "</b>" << std::endl;
67         out << "\t</color>" << std::endl;
68
69         // Para que quede bonito
70         actual_flow = INFINITO;
71 }