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
que instrui o CD para criar uma instância de GI tendo como "pai" (estando na cláusula SUBGI/EXTERNAL de) DEST, a mensagemCreateMsg :: DEST: OpcInstId GI: GISym;
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
informa o CD da ocorrência do start de um determinado evento (ID) na instância DEST;StartMsg :: DEST: InstId ID: EvId;
indica que o evento ID terminou com sucesso e, opcionalmente, qual o valor por ele devolvido; finalmenteEndMsg :: DEST: InstId ID: EvId VAL: NIL | Value;
corresponde ao cancelamento do evento indicado.CancelMsg :: DEST: InstId ID: EvId;
Sendo os comandos tratados à parte, em relação aos eventos de EVSEQ (só originam uma transição na rede), existe a mensagem
para comunicar a selecção de um determinado comando numa dada instância.CmdMsg :: DEST: InstId ID: CmdId;
Finalmente, a Mensagem
permite ao Modelo da Apresentação enviar um valor à instância indicada. A utilidade desta mensagem será explicada na secção 8.2.4.SetValMsg :: DEST: InstId VAL: Value;
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
a alteração de uma variável da Apresentação, a uma mensagemOutMsg :: SOURCE: InstId TEXT: STR;
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
se o GI terminou com sucesso eStopMsg :: SOURCE: InstId VAL: OpcValue;
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
para a obtenção da definição de um dado tipoGetVarMsg :: SOURCE: InstId ID: VarId;
e para a execução de um dado comandoGetTypeMsgSt :: SOURCE: InstId TYP: TypeId;
O campo RET é utilizado para indicar se o CD vai ficar, ou não, à espera de um resultado. Adicionalmente existe a mensagemCallMsg :: SOURCE: InstId OPR: STR ARGS: Value-list RET: Bool;
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;