Clase cMessageBox.

Entorno.

 

cMesageBox es una clase que atiende a la necesidad de guardar en un destino, una serie de mensajes para ser tratados composterioridad, tal y como se desee por parte del destinatario.

Así pues esta clase hace las funciones de buzón de mensajes, de la clase cMessage. En el diseño se especifica que cada tarea enga un buzón, y este está diseñado para eso, tras lo cual se verá la relacción entre buzones y tareas.

De ésta manera queda pues definido, un método de almacenamiento temporal de mensajes, en tiempo de ejecución.

Grafo.

Vamos a ver cuales son los miembros atributo y los miembros función del Objeto:

  cMessageBox
Privado:

 

 

 

 

 

Público:

Owner

BoxFlags

ListMsg

ReadMsg

WriteMsg

NumMsg

error

Público: cMessageBox

AddMsg

ReturnMsg

ReturnOwner

WaitForMessage

ReturnStatus

~cMessageBox


Definición de miembros.

Atributos

Definiciones previas.

Con anterioridad a la definición de los atributos y miembros de la clase, se ha optado por definir una serie de constantes y estructuras que hacen más asequible la programación. Para ello pues vamos a nombrarlas:

Constantes de error:

Las funciones suelen devolver estos valores, pero en el caso de devolver un valor de tipo puntero, cuando se incurra en error, devolverán NULL, y en el atributo público error, la causa de éste.

Mecanismos de bloqueo:

Para pequeños bloqueos de buzones, por lo general en caso de creación o borrado, se crean unas constantes que, indicarán el estado de dicho buzón:

Se darán posteriormente indicación de los miembros que utilizan estos mecanismos.

Máscaras de acceso a flags:

Se darán posteriormente indicación de los miembros que utilizan estos mecanismos.

Lectura de mensajes:

Se darán posteriormente indicación de los miembros que utilizan estos mecanismos.

Estructura nodo de mensaje:

El nodo de mensaje es, la unidad mínima dentro de una lista doblemente enlazada, con sentido dentro de ella. En él se van a agrupar los siguientes atributo:

Nombre de la estructura: tMessageNode

Atributos:

Se darán posteriormente indicación de los miembros que utilizan estos mecanismos.

Owner

Tipo: void *, @ del propietario.

Cometido: Identificar el propietario del buzón.

BoxFlags

Tipo: tMessageBox (unsigned int), flags del buzón.

Cometido: Hacer echo del estado del buzón.

Valores asignados a los bits del tipo tMsgFlasgs

ListMsg

Tipo: MessageNode *, puntero al inicio de la lista de mensajes.

Cometido: Comienzo de la lectura de los mensajes, borrado...

ReadMsg

Tipo: MessageNode *, puntero a la cabeza de lectura de la lista.

Cometido: A partir de ella se leen mensajes.

WriteMsg

Tipo: MessageNode *, puntero a la cabeza de escritura de la lista.

Cometido: A partir de ella se escriben mensajes.

NumMsg

Tipo: unsigned int, número de mensajes.

Cometido: Almacena el número de mensajes dentro de la lista.

error

Tipo: int, errores acaecidos.

Cometido: En el se especifican los errores, producidos durante la ejecución de algún miembro. Sólo se actualiza tras alguna llamada a miembro, con lo que leerla fuera de contexto, puede conllevar a conclusiones erróneas.

Miembros.

cMessageBox();

cMessageBox();

Parámetros: No necesita.

Cometido: Constructor. Inicializa los valores básicos de la clase y como propietario se asigna así mismo.

Pseudocódigo:

  1. cMessageBox()
  2. inicio
  3. Owner=this;
  4. inicializar_valores_standard;
  5. fin.

cMessageBox(p1);

Parámetros:

Cometido: Constructor. Inicializa la estructura básica del objeto, pero con propietario p1.

Pseudocódigo:

  1. cMessageBox(p1)
  2. inicio
  3. Owner=p1;
  4. inicializar_valores_standard;
  5. fin.

AddMsg

AddMsg(p1);

Parámetros:

Cometido: Añadir dentro de un buzón un mensaje.

Pseudocódigo:

  1. AddMsg(p1)
  2. inicio
  3. var
  4. nodoaux MessageNode;
  5. inicializar_nodoaux_con_mess;
  6. si(primer_elemento_de_la_lista)
  7. nodoaux->prev=NULL;
  8. ListMsg=nodoaux;
  9. ReadMsg=nodoaux;
  10. WriteMsg=nodoaux;
  11. sino
  12. AuxNode->prev=WriteMsg;
  13. WriteMsg=AuxNode;
  14. finsi;
  15. registro_usado;
  16. incr_num_mensajes;
  17. actualizar_flags;
  18. fin

ReturnMsg

p1 ReturnMsg(p2);

Parámetros:

Cometido: Devolver un mensaje de los almacenados en un buzón a su propietario.

Pseudocódigo:

  1. p1 ReturnMsg(p2)
  2. inicio
  3. var
  4. cMessage *mensaux;
  5. si_no_hay_mensajes devolver NULL;
  6. mensaux=mensaje_en_cola;
  7. activa_flag_leído;
  8. encaso(p2)
  9. _REMOVE:
  10. actualizar_punteros;
  11. liberar_mensaje;
  12. descontar_mensaje;
  13. actualizar_flags;
  14. _NOREMOVE:
  15. fincaso;
  16. actualizar_flags;
  17. devolver mensaux;
  18. fin.

ReturnOwner

p1 ReturnOwner();

Parámetros:

Cometido: Devolver el propietario de buzón;

Pseudocódigo:

  1. p1 ReturnOwner()
  2. inicio
  3. devolver Owner;
  4. fin.

WaitForMessage

WaitForMessage ();

Parámetros: No necesita.

Cometido: Provoca cambios a la siguiente tarea del planificador, mientras no tenga mensajes en el buzón.

Pseudocódigo:

  1. WaitForMessage()
  2. inicio
  3. mientras(consulta_flags==no_mensajes) siguiente_tarea;
  4. finmientras;
  5. fin.

ReturnStatus

p1 ReturnStatus();

Parámetros:

Cometido: Devolver el estado del buzón al que se le consulta.

Pseudocódigo:

  1. p1 ReturnStatus()
  2. inicio
  3. devolver BoxFlags;
  4. fin.

~cMessageBox

~cMessageBox();

Parámetros: No necesita.

Cometido: Eliminar la instancia del objeto de la memoria, eliminando así mismo a todos los mensajes que contiene.

Pseudocódigo:

  1. ~cMessageBox()
  2. inicio
  3. mientras(no_sea_fin_de_lista)
  4. liberar mensaje;
  5. actualizar_indices;
  6. liberar nodo_de_mensaje;
  7. finmientras;
  8. fin.


zeusv2@geocities.com

Última actualización de la página: 12/03/99


Esta página está hospedada en   Consigue tu Página Web Gratis