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