O Controlador de Diálogo deve comunicar com o Modelo da Apresentação e o Modelo da Aplicação. Vamos agora descrever os protocolos através dos quais essa comunicação é implementada. No Apêndice I é apresentada a representação esquemática das relações entre as diferentes mensagens que de seguida se descrevem, a notação utilizada é a desenvolvida para EVSEQ.
Antes de mais, o CD deve ter a capacidade de receber do Modelo da Apresentação informação sobre quando e como activar e desactivar cada um dos Guiões.
Vendo os GI's como objectos, e já que o mesmo Guião pode ser utilizado em simultâneo para fins diferentes
, a activação de um GI corresponderá à activação de uma instância do mesmo.
Existirá, então, a mensagem
CreateMsg :: DEST: OpcInstId
GI: GISym;
que instrui o CD para criar uma instância de GI tendo como "pai" (estando na cláusula SUBGI/EXTERNAL de) DEST, a mensagem
que o instrui para activar uma determinada instância e a mensagemOpenMsg :: DEST: InstId;
que o informa que deverá eliminar a instância indicada.KillMsg :: DEST: InstId;
Como pode ver-se na fig. 13, cada evento de EVSEQ origina três eventos na Petri Net: start, end e cancel; eventos esses que o Modelo da Apresentação deve comunicar ao CD. Deste modo teremos mais três mensagens, uma para cada um dos eventos. A mensagem
StartMsg :: DEST: InstId
ID: EvId;
informa o CD da ocorrência do start de um determinado evento (ID) na instância DEST;
EndMsg :: DEST: InstId
ID: EvId
VAL: NIL | Value;
indica que o evento ID terminou com sucesso e, opcionalmente, qual o valor por ele devolvido; finalmente
CancelMsg :: DEST: InstId
ID: EvId;
corresponde ao cancelamento do evento indicado.
Sendo os comandos tratados à parte, em relação aos eventos de EVSEQ (só originam uma transição na rede), existe a mensagem
CmdMsg :: DEST: InstId
ID: CmdId;
para comunicar a selecção de um determinado comando numa dada instância.
Finalmente, a Mensagem
SetValMsg :: DEST: InstId
VAL: Value;
permite ao Modelo da Apresentação enviar um valor à instância indicada.
A utilidade desta mensagem será explicada na secção 8.2.4.
O protocolo de comunicação no sentido Modelo da Apresentação-Controlador de Diálogo é então
MesgLxSt = CreateMsg | OpenMsg | StartMsg | EndMsg |
CancelMsg | CmdMsg | KillMsg | SetValMsg;
Quando recebe uma mensagem CreateMsg, o Controlador de Diálogo cria, como foi dito, uma nova instância para o Guião indicado e deverá comunicar ao Modelo da Apresentação qual a instância que foi criada, para que este possa mais tarde referir-se a ela. Para tal existe a mensagem
InstMsg :: SOURCE: InstId;
De cada vez que um GI recebe uma mensagem e muda de estado, o CD tem que comunicar ao Modelo da Apresentação quais os eventos de EVSEQ e quais os comandos que são válidos. Para esse fim utiliza as mensagens
EnableMsg :: SOURCE: InstId
ID: TransId;
DisableMsg :: SOURCE: InstId
ID: TransId;
Durante o processamento das instruções (em INIT ou TRANS), uma instrução output dá origem a uma mensagem
OutMsg :: SOURCE: InstId
TEXT: STR;
a alteração de uma variável da Apresentação, a uma mensagem
ShowMsg :: SOURCE: InstId
ID: VarId
VAL: Value;
Para o CD poder informar o Modelo da Apresentação que detectou o final de um Guião, existem as mensagens
StopMsg :: SOURCE: InstId
VAL: OpcValue;
se o GI terminou com sucesso e
se foi cancelado.AbortMsg :: SOURCE: InstId;
Quando termina o processamento de uma mensagem o Controlador indica ao Modelo da Apresentação que pode continuar o diálogo com a mensagem
GoMsg :: SOURCE: InstId
CMDLINE: OpcCmdLineDescr;
O protocolo no sentido Controlador de Diálogo-Modelo da Apresentação é
MesgStLx = InstMsg | OutMsg | EnableMsg | DisableMsg | ShowMsg |
GoMsg | StopMsg | AbortMsg;
Na direcção oposta, o Controlador de Diálogo necessita comunicar com o Modelo da Aplicação. Neste caso, o protocolo é mais simples. Os únicos pedidos que o CD faz são para a obtenção do valor de uma dada variável da Aplicação
GetVarMsg :: SOURCE: InstId
ID: VarId;
para a obtenção da definição de um dado tipo
GetTypeMsgSt :: SOURCE: InstId
TYP: TypeId;
e para a execução de um dado comando
CallMsg :: SOURCE: InstId
OPR: STR
ARGS: Value-list
RET: Bool;
O campo RET é utilizado para indicar se o CD vai ficar, ou não, à espera de um resultado.
Adicionalmente existe a mensagem
que o Controlador utiliza para informar o Modelo da Aplicação de que deve terminar a execução. O protocolo Controlador de Diálogo-Modelo da Aplicação é, assim,HaltMsg :: STATUS: INT;
MesgStSm = GetVarMsg | CallMsg | GetTypMsgSt | HaltMsg;
Na sentido inverso existem apenas as mensagens SetValMsg que o Modelo da Aplicação utiliza para enviar valores ao CD, quer como resposta a GetValMsg, quer a CallMsg quando a operação produza um resultado e ele seja pedido e DefTypMsg que o Modelo da Aplicação utiliza para responder ao pedido da definição de um tipo.
MesgSmSt = SetValMsg | DefTypMsg;
DefTypMsg :: SOURCE: InstId
DEF: TypeDef;