namespace PlaQui {
+namespace Model {
/** Conector genérico de elementos
+ *
+ * El conector es un interfaz común que permite a objetos de distinto
+ * tipo comunicarse entre sí sin la necesidad de conocerse.
+ * Maneja una lista de elementos conectados a uno, que pueden estar
+ * tanto conectados a una entrada como a una salida.
*/
class IConector {
public:
- /// Constructor
+ /** Constructor
+ *
+ * \param in Cantidad de entradas
+ * \param out Cantidad de salidas
+ */
IConector(unsigned in, unsigned out);
/// Destructor
virtual ~IConector();
/** Envía un mensage a los elementos conectados
*
- * Esvía un mensage a los elementos conectados a la entrada o
+ * Envía un mensage a los elementos conectados a la entrada o
* a la salida.
* \param where Donde enviar el mensage, IConector::IN o IConector::OUT
* \param msg Mensage a enviar
- * \return Respuesta al mensage. Se interpreta dependiendo del mensage
+ * \param data Dato opcional a mandar, según el mensage que se envíe
*/
- int send_msg(int where, int msg);
+ void send_msg(int where, int msg, void *data=NULL);
- /// Recive un mensage
- virtual void recieve_msg(int msg, IConector *who);
+ /** Recibe un mensage
+ *
+ * Este procedimiento atiende los mensages enviados por otros objetos.
+ * El mensage \e msg es enviado por \e who, quien puede enviar opcionalmente
+ * un dato en \e data. El campo \e data debe ser interpretado en forma
+ * correcta dependiendo del mensage enviado.
+ * El objeto que recibe un mensage puede, de ser necesario, responder al
+ * objeto que lo envió llamando directamente al método recieve_msg del objeto
+ * \e who. No se recomienda enviar un mensage mediante send_msg ya que puede
+ * ocacionar que objetos que no esten esperando una respuesta se comporte de
+ * manera indeterminada.
+ * \param msg ID del mensage enviado.
+ * \param who Objeto que envía el mensage.
+ * \param data Dato opcional a enviar.
+ */
+ virtual void recieve_msg(int msg, IConector *who, void *data);
/** Conecta un objeto con otro
*
/// Constantes de posición donde conectar
enum {
- IN, ///< conectar a la entrada
+ IN=0, ///< conectar a la entrada
OUT ///< conectar a la salida
};
* de evitar solapamiento de mensajes.
* Por ejemplo, si tenemos una clase B con un mensaje TEST se declararía
* como :
- * \verbatim
+ * \code
* class B:public IConector {
* enum {
* MSG_TEST=IConector::MSG_LAST,
* MSG_LAST
* };
- * \endverbatim
+ * \endcode
*/
enum {
MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje
IConector &operator = (const IConector &) { return (*this); }
};
-}
+} // namespace Model
+} // namespace PlaQui
#endif // _I_CONECTOR_H_
+