]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/src/iconector.cpp
c4db5d3c157dcbe34acf8a9eb67964ba84f3c86f
[z.facultad/75.42/plaqui.git] / Model / src / iconector.cpp
1
2
3 #include "iconector.h"
4
5 using namespace PlaQui;
6
7 IConector::IConector(unsigned in, unsigned out)
8 {
9         in_slots = in;
10         out_slots = out;
11 }
12
13 IConector::~IConector()
14 {
15         // Limpio las listas. Los objetos no se destruyen!!
16         in_list.clear();
17         out_list.clear();
18 }
19
20 int IConector::send_msg(int where, int msg)
21 {
22         // Recorro toda la lista y envío el mensage a cada
23         // elemento conectado en "where"
24         std::list<IConector *>::iterator it;
25         switch (where) {
26                 case IN:
27                         for(it=in_list.begin(); it!=in_list.end(); it++)
28                                 (*it)->recieve_msg(msg, this);
29                         break;
30                 case OUT:
31                         for(it=out_list.begin(); it!=out_list.end(); it++)
32                                 (*it)->recieve_msg(msg, this);
33         }
34
35         // TODO : ver el tema de los valores de retorno!!
36         return 0;
37 }
38
39 void IConector::recieve_msg(int msg, IConector *who)
40 {
41         // Manejo los mensages que yo conozco
42         switch (msg) {
43                 case MSG_DISCONECT:
44                         // Elimino el objeto de las listas, si es que
45                         // existe en alguna de las dos.
46                         in_list.remove(who);
47                         out_list.remove(who);
48         }
49 }
50
51 bool IConector::connect(IConector *obj, int place)
52 {
53         switch (place) {
54                 case IN:
55                         if (in_list.size() <= in_slots) {
56                                 in_list.push_back(obj);
57                         } else {
58                                 return false; // no se pudo conectar!
59                         }
60                 case OUT:
61                         if (out_list.size() <= out_slots) {
62                                 out_list.push_back(obj);
63                         } else {
64                                 return false; // no se pudo conectar!
65                         }
66         }
67
68         // se pudo conectar sin problemas
69         return true;
70 }
71