• Nenhum resultado encontrado

Comunica¸ c˜ ao no Ambiente Virtual

3.3.1 Processamento em Lote

No modo de funcionamento em Lote (Batch), o tempo ´e discretizado em turnos e s´o ´e atuali-zado quando todos os agentes finalizam suas tarefas do presente turno, sem existir nenhum tipo de restri¸c˜ao temporal. O controle do tempo est´a a cargo do Agente Ambiente. Esse modo de execu¸c˜ao deve ser utilizado quando ´e necess´ario controlar a sequˆencia de a¸c˜oes dos agentes, ou ent˜ao em processos n˜ao interativos cujo custo computacional ´e intenso, criando uma sa´ıda sonora que ser´a apreciada posteriormente.

Basicamente, ao in´ıcio de cada turno, os Agentes Musicais executam suas tarefas enviando even-tos para o Ambiente, avisam o Ambiente sobre o t´ermino das tarefas e aguardam o fim do turno.

Em seguida, o Agente Ambiente processa os eventos recebidos, atualiza o estado do mundo virtual, se necess´ario enviando eventos de volta aos Agentes Musicais e, finalmente, atualiza o tempo, ini-ciando um novo turno.

Embora exista um controle na ordem do processamento, alternado entre agentes musicais e agente ambiente, os Agentes Musicais efetuam o seu processamento interno de forma paralela. O mecanismo de processamento em lote serve assim simplesmente para restringir algumas liberdades dos sistemas multiagentes, ganhando em tempo de processamento.

A dura¸c˜ao real de um turno pode variar, uma vez que depende do tempo de execu¸c˜ao utilizado pelos Agentes Musicais e pelo Agente Ambiente. O usu´ario do Ensemble pode especificar atrav´es de parˆametros qual ´e o tempo m´ınimo que deve durar um turno e se existe um tempo m´aximo para um agente enviar sua mensagem de fim de turno. O primeiro parˆametro ´e ´util em casos que se deve atualizar uma interface gr´afica, j´a o segundo impede que a simula¸c˜ao fique paralisada de-vido a algum agente que n˜ao consegue terminar suas tarefas e enviar sua mensagem de fim de turno.

Devido `a sua natureza dual, exigindo um controle centralizado das a¸c˜oes de v´arios agentes autˆonomos, o processamento em lote exige uma complexa troca de comandos entre os agentes e uma sincroniza¸c˜ao de a¸c˜oes, principalmente na inicializa¸c˜ao e finaliza¸c˜ao de um agente musical e no controle da troca de turno.

3.3.2 Processamento em Tempo Real

O processamento em Tempo Real n˜ao pressup˜oe nenhuma ordem na execu¸c˜ao dos Agentes Mu-sicais e do Agente Ambiente, assim os eventos podem ser enviados e recebidos a qualquer tempo (exceto quando existir alguma troca de evento peri´odico, que ser´a detalhada na se¸c˜ao 3.6.5.2). O modo de funcionamento do Tempo virtual ´e o controlado pelo rel´ogio interno.

Al´em disso, uma caracter´ıstica desse modo de execu¸c˜ao ´e a poss´ıvel existˆencia de prazos para a execu¸c˜ao de tarefas dependentes do rel´ogio interno do computador e, desse modo, do decorrer do tempo no mundo real. Aplica¸c˜oes desse tipo s˜ao chamadas tecnicamente de tempo real e um exemplo de uma aplica¸c˜ao t´ıpica ´e a troca de ´audio digital (mostrada na se¸c˜ao 4.3). O modo de execu¸c˜ao em lote tamb´em permite o agendamento de tarefas mas o controle do tempo est´a na m˜ao do usu´ario, e n˜ao do rel´ogio interno do computador.

3.4 Comunica¸ c˜ ao no Ambiente Virtual

Existem duas formas de comunica¸c˜ao entre atores no Ensemble: a troca de eventos, que repre-sentam sensa¸c˜oes e atua¸c˜oes no ambiente virtual e ser˜ao discutidas com mais detalhe na se¸c˜ao3.6;

e a troca de mensagens, atrav´es do uso do Canal de Comunica¸c˜ao.

O Canal de Comunica¸c˜ao ´e um m´odulo especial presente em todo Agente Musical e no Agente Ambiente, utilizado para trocar mensagens entre os agentes, seus componentes, aplica¸c˜oes externas e o usu´ario. Este m´odulo est´a ligado diretamente ao agente, e pode ser utilizado por todos os seus componentes internos. A figura 3.5 ilustra os poss´ıveis modos de comunica¸c˜ao entre os diversos agentes e sistemas.

MusicalAgent MusicalAgent

EnvironmentAgent RouterAgent

Middleware Multiagente

/file/... /external/...

/ensemble/...

/console/...

Mensagens Eventos

Ambiente Virtual

Figura 3.5:Comunica¸ao no Ensemble

Este canal ´e utilizado entre Agentes Musicais, o Agente Ambiente e Agentes Externos para envio de mensagens de controle e instru¸c˜oes/parˆametros diversos, por exemplo, para indicar o fim de um turno ou a atualiza¸c˜ao de um fato p´ublico. Al´em disso, pode ser utilizado para troca de mensagens diretamente entre Agentes Musicais, sem a necessidade de ser tratado pelo Agente Am-biente como um evento.

As mensagens podem ser classificadas em trˆes tipos:

• mensagens de controle interno

Uma s´erie de comandos utilizados para o controle interno do arcabou¸co, como o registro de componentes, sincroniza¸c˜ao de troca de eventos e controle do processamento em lote. Estes comandos n˜ao est˜ao dispon´ıveis ao usu´ario. A tabela3.1mostra todos os comandos utilizados internamente no arcabou¸co;

• mensagens de controle do usu´ario

3.4 COMUNICA ¸C ˜AO NO AMBIENTE VIRTUAL 37 Certos comandos que controlam o ciclo de vida do sistema. Eles podem ser utilizados pelo usu´ario, em tempo de execu¸c˜ao, para criar e destruir agentes, adicionar e remover componen-tes, alterar parˆametros e controlar a simula¸c˜ao. A tabela 3.2mostra todos estes controles;

• mensagens do usu´ario

S˜ao comandos ou mensagens definidos pelo usu´ario para uso em componentes customizados.

3.4.1 Roteamento de Comandos

O Ensemble disponibiliza um servi¸co de roteamento de mensagens capaz de efetuar a troca de mensagens entre Agentes Musicais, Agente Ambiente e Agentes Externos. Todos os agentes do sistema e seus componentes internos s˜ao capazes de receber e enviar mensagens atrav´es de um servi¸co de roteamento de mensagens. Esse servi¸co ´e respons´avel pela entrega de cada mensagem ao seu correto destinat´ario utilizando o mecanismo interno de troca de mensagens do middleware.

O roteador de comandos utiliza um esquema de endere¸camento baseado em uma sequˆencia de caracteres (string) que cont´em o nome do sistema, e seu componente interno quando for o caso.

Por exemplo, pode-se enviar uma mensagem a um sensor/ensemble/pianist/right ear, ou para um programa externo, como o Pd, usando o endere¸co /external/pd. Estes endere¸cos podem ser:

• /ensemble/<AGENT_NAME>/[<AGENT_COMPONENT>|<EVENT_SERVER>], utilizado quando o destino ´e algum elemento que est´a sendo executado no arcabou¸co, ou seja, agentes musicais, seus componentes, o agente ambiente e seus servidores de eventos;

• /external/<APPLICATION_ADDRESS>, utilizado para se comunicar com outras

aplica-¸c˜oes, o Pd por exemplo;

• /console/<CONSOLE_NAME>, utilizado para que o usu´ario possa digitar comandos direta-mente no console de um terminal, e tamb´em para que o arcabou¸co posso informar o usu´ario de eventos importantes;

• /file/<FILE_NAME>, utilizado para armazenar mensagens do arcabou¸co ou para ler um script.

A mensagem enviada atrav´es do canal de comunica¸c˜ao ´e encapsulada em uma estrutura de dados que armazena o nome do comando e seus parˆametros, representada no arcabou¸co atrav´es de um objeto da classe Command. Esse identificador de comando ´e importante no momento do tratamento da mensagem, facilitando a filtragem das mensagens de controle. Cada parˆametro ´e composto por um identificador e um valor associado, e ambos s˜ao obrigatoriamente sequˆencias de caracteres.

Para acessar o roteador de comandos, os agentes e seus componentes implementam a interface RouterClient. Ela disp˜oe de um m´etodo que devolve o endere¸co do componente (getAddress()), facilitando a identifica¸c˜ao de cada componente.

O envio de mensagens ´e feito atrav´es do m´etodosendCommand(Command cmd), que deve iden-tificar o destinat´ario e informar o comando a ser enviado. No caso de se tratar de uma mensagem interna do ambiente, entre agentes, basta enviar diretamente a mensagem atrav´es do servi¸co de mensagens do arcabou¸co. Caso contr´ario, a mensagem ´e encaminhada para um servi¸co especial de roteamento que far´a a interface com o mundo exterior.

O recebimento de mensagens do canal de comunica¸c˜ao ´e feita atrav´es do m´etodo receiveCommand(Command cmd), que roda de forma independente. Esse m´etodo ´e respons´avel

Tabela3.1:Listademensagensdecontroleinterno

ComandoParˆametrosDescri¸c˜ao

EVENT_REGISTEREVT_TYPEEnviadopeloAgenteMusicalpararegistrarumSensor/AtuadornoAm-bienteehabilitaratrocadeeventosdotipoEVT_TYPE.

EVENT_REGISTER_ACKPARAMETEREnviadopeloAmbienteparaconfirmaroregistrodeumSensor/Atua-dor,informandoosparˆametrosPARAMETERdeconfigura¸c˜aodatrocadeeventos.

EVENT_DEREGISTER-RetiraumSensor/AtuadordoregistrodoAgenteAmbiente

PARAMETERNAME,VALUEEnviadopeloAmbienteparaalteraralgumparˆametrodeconfigura¸c˜ao

NAMEcomumnovovalorVALUE.

BATCH_REGISTER-Nocasodeprocessamentoemlote,iniciaoregistrodeumAgenteMusicalnoAmbiente.

BATCH_REGISTER_ACKTURNEnviadopeloAmbienteparaconfirmaroregistrodeumAgenteMusicalnoprocessamentoemlote,indicandoemqualturnoTURNoagentedeveiniciaroprocessamento.

BATCH_DEREGISTER-RetiraumAgenteMusicaldoprocessamentoemLotedoAgenteAmbiente.

BATCH_TURNNUM_EVENTSNocasodeprocessamentoemlote,utilizadopeloAgenteMusicalparainformaraoAmbientequej´aterminouseuturno,tendogerado

NUM_EVENTSeventos.

BATCH_TURN_ACKNUM_EVENTSEnviadopeloAmbienteaosAgentesMusicaisparaconfirmarorece-bimentodocomandodemudan¸cadeturno,informandoon´umerodeeventosNUM_EVENTSenviadosaoAgenteMusicalnoturno.

BATCH_EVENT_ACK-EnviadopeloAgenteMusicalparaoAmbienteconfirmandoorecebi-mentodoseventosdefimdeturno.

PUBLIC_FACT_UPDATENAME,VALUEEnviadopeloAgenteMusicalaoAgenteAmbientepararegistrarumfatodenomeNAMEevalorVALUEdesuaBasedeConhecimentoscomop´ublico.

KILL_AGENT-UtilizadopeloAgenteAmbienteparainiciaroprocessodefinaliza¸c˜aodeumAgenteMusical.

MESSAGETEXTEnviaumamensagemcomoconte´udoTEXTdiretamenteentreAgentesMusicais.

3.4 COMUNICA ¸C ˜AO NO AMBIENTE VIRTUAL 39

Tabela3.2:Listademensagensdecontroledousu´ario ComandoParˆametrosDescri¸c˜ao START_SIMULATION-Iniciaasimula¸c˜aodaaplica¸c˜aomusical. STOP_SIMULATION-Finalizaasimula¸c˜aodaaplica¸c˜aomusical. CREATE_AGENTNAME,CLASSCriaumnovoAgenteMusicalbaseadonaclasseCLASSe comnomeNAMEeoinserenoAmbienteVirtual. DESTROY_AGENTNAMERetiraefinalizaoagenteNAMEdoAmbientevirtual. ADD_COMPONENTAGENT,NAME,CLASS, EVT_TYPEAdicionaaoAgenteMusicalAGENTumnovocomponentede nomeNAME,baseadonaclasseCLASSe,casosejaumSensor ouAtuador,otipodeeventoEVT_TYPEqueeletrata. REMOVE_COMPONENTAGENT,NAMERemoveocomponenteNAMEdoAgenteMusicalAGENT. ADD_EVENT_SERVEREVT_TYPE,CLASSAdicionaaoAgenteAmbienteumServidordeEventosbase- adonaclasseCLASSequetrataeventosdotipoEVT_TYPE. REMOVE_EVENT_SERVEREVT_TYPERemovedoAgenteAmbienteoServidordeEventosque tratadotipoEVT_TYPE. PARAMETERAGENT[:COMPONENT], NAME,VALUEAlteraouadicionaumparˆametrodeumAgenteAGENT(ou deumdeseuscomponentesinternosCOMPONENT)denome NAMEecomvalorVALUE.

por identificar o destinat´ario da mensagem, rencaminhando-a caso n˜ao seja o destinat´ario final, ou processando-a caso contr´ario. O processamento da mensagem implica em filtrar as mensagens de controle, processando-as diretamente, ou executando o m´etodoprocessCommand(Command cmd).

Esse m´etodo, implementado pelo usu´ario, permite que comandos espec´ıficos do componente sejam executados. Por exemplo, um Servidor de Eventos de movimenta¸c˜ao pode tratar uma mensagem do agente solicitando uma mudan¸ca de posi¸c˜ao.