]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blob - Model/src/iconector.cpp
- El modelo comienza a cobrar vida y a ganar funcionalidad.
[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 void 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, NULL);
29                         break;
30                 case OUT:
31                         for(it=out_list.begin(); it!=out_list.end(); it++)
32                                 (*it)->recieve_msg(msg, this, NULL);
33         }
34 }
35
36 void IConector::recieve_msg(int msg, IConector *who, void *data)
37 {
38         // Manejo los mensages que yo conozco
39         switch (msg) {
40                 case MSG_DISCONECT:
41                         // Elimino el objeto de las listas, si es que
42                         // existe en alguna de las dos.
43                         in_list.remove(who);
44                         out_list.remove(who);
45         }
46 }
47
48 bool IConector::connect(IConector *obj, int place)
49 {
50         switch (place) {
51                 case IN:
52                         if (in_list.size() <= in_slots) {
53                                 in_list.push_back(obj);
54                         } else {
55                                 return false; // no se pudo conectar!
56                         }
57                 case OUT:
58                         if (out_list.size() <= out_slots) {
59                                 out_list.push_back(obj);
60                         } else {
61                                 return false; // no se pudo conectar!
62                         }
63         }
64
65         // se pudo conectar sin problemas
66         return true;
67 }
68