11 /** Conector genérico de elementos
17 * \param in Cantidad de entradas
18 * \param out Cantidad de salidas
20 IConector(unsigned in, unsigned out);
24 /** Envía un mensage a los elementos conectados
26 * Envía un mensage a los elementos conectados a la entrada o
28 * \param where Donde enviar el mensage, IConector::IN o IConector::OUT
29 * \param msg Mensage a enviar
31 void send_msg(int where, int msg);
35 * Este procedimiento atiende los mensages enviados por otros objetos.
36 * El mensage \e msg es enviado por \e who, quien puede enviar opcionalmente
37 * un dato en \e data. El campo \e data debe ser interpretado en forma
38 * correcta dependiendo del mensage enviado.
39 * El objeto que recibe un mensage puede, de ser necesario, responder al
40 * objeto que lo envió llamando directamente al método recieve_msg del objeto
41 * \e who. No se recomienda enviar un mensage mediante send_msg ya que puede
42 * ocacionar que objetos que no esten esperando una respuesta se comporte de
43 * manera indeterminada.
44 * \param msg ID del mensage enviado.
45 * \param who Objeto que envía el mensage.
46 * \param data Dato opcional a enviar.
48 virtual void recieve_msg(int msg, IConector *who, void *data);
50 /** Conecta un objeto con otro
52 * \param place IConector::IN o IConecor::OUT para conectar a la entrada o salida.
53 * \param obj Objeto a conectar
54 * \return true si se pudo conectar
56 bool connect(IConector *obj, int place);
58 /// Constantes de posición donde conectar
60 IN, ///< conectar a la entrada
61 OUT ///< conectar a la salida
64 /** Mensages a este nivel
66 * Las clases descendientes que quieran definir sus mensajes deben utilizar
67 * el valor de IConector::MSG_LAST como valor para el primer msg, a fin
68 * de evitar solapamiento de mensajes.
69 * Por ejemplo, si tenemos una clase B con un mensaje TEST se declararía
72 * class B:public IConector {
74 * MSG_TEST=IConector::MSG_LAST,
80 MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje
84 /// Lista de objetos conectados a las entradas
85 std::list<IConector *> in_list;
86 /// Lista de objetos conectados a las salidas
87 std::list<IConector *> out_list;
88 /// Cantidad de entradas disponibles
89 unsigned int in_slots;
90 /// Canitidad de salidas disponibles
91 unsigned int out_slots;
94 // Oculto copia entre clases
96 IConector(const IConector &) {}
97 IConector &operator = (const IConector &) { return (*this); }
101 } // namespace PlaQui
103 #endif // _I_CONECTOR_H_