Protocolos de Comunicação



next up previous contents
Next: Animador de Petri Up: O Controlador de Previous: O Controlador de

Protocolos de Comunicação

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 diferentesgif, 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
  OpenMsg :: DEST: InstId;
que o instrui para activar uma determinada instância e a mensagem
  KillMsg :: DEST: InstId;
que o informa que deverá eliminar a instância indicada.

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
  AbortMsg :: SOURCE: InstId;
se foi cancelado.

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
  HaltMsg :: STATUS: INT;
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,
  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;



next up previous contents
Next: Animador de Petri Up: O Controlador de Previous: O Controlador de



Jose Franscisco Creissac Campos
Wed Jan 31 20:30:35 MET 1996