X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/98871795be266e4ea8b4662737ac618ebee0fb79..9322e49b932d824e5664aa8c0e0f9a41464537b1:/Model/src/iconector.cpp?ds=sidebyside diff --git a/Model/src/iconector.cpp b/Model/src/iconector.cpp index 778da63..68d4024 100644 --- a/Model/src/iconector.cpp +++ b/Model/src/iconector.cpp @@ -1,47 +1,48 @@ #include "iconector.h" +#include +using namespace PlaQui::Model; -using namespace PlaQui; - -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, void *data) { // Recorro toda la lista y envĂ­o el mensage a cada - // elemento conectado + // elemento conectado en "where" std::list::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, data); 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, data); + } } - - // 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); } } @@ -49,20 +50,19 @@ bool IConector::connect(IConector *obj, int place) { 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;