#include "iconector.h"
-using namespace PlaQui;
+using namespace PlaQui::Model;
-IConector::IConector()
+IConector::IConector(unsigned in, unsigned out)
{
- cant_entradas = cant_salidas = 0;
+ in_slots = in;
+ out_slots = out;
}
IConector::~IConector()
{
// Limpio las listas. Los objetos no se destruyen!!
- entradas.clear();
- salidas.clear();
+ in_list.clear();
+ out_list.clear();
}
-int IConector::send_msg(int where, int msg)
+void IConector::send_msg(int where, int msg)
{
// Recorro toda la lista y envío el mensage a cada
- // elemento conectado
+ // elemento conectado en "where"
std::list<IConector *>::iterator it;
switch (where) {
case IN:
- for(it=entradas.begin(); it!=entradas.end(); it++)
- (*it)->recieve_msg(msg, this);
+ for(it=in_list.begin(); it!=in_list.end(); it++)
+ (*it)->recieve_msg(msg, this, NULL);
break;
case OUT:
- for(it=salidas.begin(); it!=salidas.end(); it++)
- (*it)->recieve_msg(msg, this);
+ for(it=out_list.begin(); it!=out_list.end(); it++)
+ (*it)->recieve_msg(msg, this, NULL);
}
-
- // TODO : ver el tema de los valores de retorno!!
- return 0;
}
-void IConector::recieve_msg(int msg, IConector *who)
+void IConector::recieve_msg(int msg, IConector *who, void *data)
{
// Manejo los mensages que yo conozco
switch (msg) {
case MSG_DISCONECT:
- // FIXME: sacar el elemento who de la lista!
- return;
+ // Elimino el objeto de las listas, si es que
+ // existe en alguna de las dos.
+ in_list.remove(who);
+ out_list.remove(who);
}
}
{
switch (place) {
case IN:
- if (entradas.size() <= cant_entradas) {
- entradas.push_back(obj);
- cant_entradas++;
+ if (in_list.size() <= in_slots) {
+ in_list.push_back(obj);
} else {
return false; // no se pudo conectar!
}
+ break;
case OUT:
- if (salidas.size() <= cant_salidas) {
- salidas.push_back(obj);
- cant_salidas++;
+ if (out_list.size() <= out_slots) {
+ out_list.push_back(obj);
} else {
return false; // no se pudo conectar!
}
-}
+ }
// se pudo conectar sin problemas
return true;