5 Exemplo de Aplicação

Documentos relacionados
Figura 4.1: IDL para disponibilizar downloadable stubs.

Os passos a seguir servirão de guia para utilização da funcionalidade Acordo Financeiro do TOTVS Gestão Financeira.

Trabalho Prático II - Resta 1 Data de Entrega: Conferir no calendário!

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2

LEUCOTRON EQUIPAMENTOS LTDA ROTEIRO DE INTERLIGAÇÃO SIP ACTIVE IP COM REGISTRO

Introdução à orientação a objetos

Curso de Inverno - CECID

Administração de Banco de Dados. José Antônio da Cunha CEFET - RN

Programação de Computadores I. Linguagem C Função

Manual de Utilização. Ao acessar o endereço chegaremos a seguinte página de entrada: Tela de Abertura do Sistema

CRIAÇÃO DE TABELAS NO ACCESS. Criação de Tabelas no Access

Comandos de Eletropneumática Exercícios Comentados para Elaboração, Montagem e Ensaios

Rateio por Despesas por Contas Contábeis

Passos para a instalação

Disciplina: Unidade III: Prof.: Período:

Organização e Arquitetura de Computadores. Ivan Saraiva Silva

Sistema NetConta I - Guia de Referência Rápida

Introdução ao SCS. Tecgraf PUC-Rio. outubro de 2010

Ferramenta Nessus e suas funcionalidades

Manual de instalação do Microsoft SQL Server 2008 R2 Express no Windows 10

Manual de Programação TED1000 versão TC100 Ethernet

Projeto/Versão/Release: IS2 AUTOMOTIVE / EVOLUTION / 62 Data Release: 06/05/2015

1 Visão Geral. 2 Instalação e Primeira Utilização. Manual de Instalação do Gold Pedido

HEMOVIDA (CICLO DO SANGUE - Gerenciamento de estoque para grandes eventos)

2 Segmentação de imagens e Componentes conexas

Para usar com Impressoras multifuncionais (MFPs) ativadas para a Tecnologia Xerox ConnectKey

Classificação de Ativo Orçamento e Provisão de Despesa

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

Parametrização do Banco de Dados PROGRESS Base de Dados Origem

Inteligência Artificial

TUTORIAL MATLAB Victor Breder 2016

Rede VPN UFBA Procedimento para configuração

TUTORIAL PROCESSOS DE INSTALAÇÃO DO MYMIX MOBILE

Módulo e-rede Magento v1.0. Manual de. Instalação do Módulo. estamos todos ligados

Processamento de Dados aplicado à Geociências. AULA 1: Introdução à Arquitetura de Computadores

Simulado de Linguagem de Programação Java

Índice. Manual De instalação ProjectNet Manager

Como Atualizar o SolidWorks Enterprise PDM. Atualização do Servidor

UNIVERSIDADE DO TOCANTINS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PRÁTICA EM PROGRAMAÇÃO DE SISTEMAS

Banco de Dados. Banco de Dados Parte 2. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

DALUA: BIBLIOTECA PARA APLICAÇÕES DISTRIBUÍDAS

UNIVERSIDADE TÉCNICA DE LISBOA INSTITUTO SUPERIOR TÉCNICO. Licenciatura em Engenharia Informática e Computadores Alameda e Taguspark

Sistemas Operacionais. Rodrigo Rubira Branco

Resolução da Lista de Exercício 6

FastCube 2.0 Programmer Manual

Impressora em Cores Xerox 800/1000 Impressão de divisórias

Configuração para Uso do Tablet no GigaChef e Outros Dispositivos

TOP 20 ROTINAS QUE VOCÊ PODE AUTOMATIZAR HOJE!

UNIVERSIDADE ESTADUAL PAULISTA. Apostila Pascal Ed Prof. Dr. Galeno José de Sena DMA/FEG CAPÍTULO 8

Sistemas Distribuídos

COMO CRIAR UM PEDIDO DE COMPRAS

Método de ordenação - objetivos:

Redes de Computadores

Prefeitura da Cidade de Nova Iguaçú. SEMED Secretaria Municipal de Educação. Coordenadoria Municipal de Ciência e Tecnologia

Capítulo 9 - Imagens. Imagens

Banco de Dados I. Prof. Edson Thizon

MANUAL DE INSTALAÇÃO DO MILLENNIUM BASIC

ENG1000 Introdução à Engenharia

Guia do Administrador de Licenças de Usuários Autorizados do IBM SPSS Modeler IBM

Sistema De Gerenciamento Web UFFS

JSP - ORIENTADO A OBJETOS

MANUAL HAE - WEB MANUAL WEB HAE

Orientação Profissional Empregabilidade Empreendedorismo. Guia para o Portal

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

Engenharia de Software II

ISS Eletrônico. Formato de Arquivos para Transmissão de Documentos Declarados através do aplicativo OFFLINE. Extensão do Arquivo JUNHO2006.

Valor do Vale Cultura R$ 50,00 ( cinqüenta reais) mensais

Cadastro de Usuários Manual de Usuário 09/05/2011 FAPESP

MANUAL DO PROFESSOR. - Inscrições Colégios. Colégios Participantes de Temporadas anteriores:

Lista de Exercícios 1

Astra LX Computadores e Impressoras Guia para o processo de Configuração de Computadores e Impressoras conectadas ao Programa AstraLX.

Gestão Documental. Gestão Documental

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Índice. tabela das versões do documento. GPOP - Gerenciador POP _ /01/2016 1/14. título: GPOP. assunto: Manual de utilização

REGIMENTO DA REVISTA DIÁLOGO EDUCACIONAL

tipo e tamanho e com os "mesmos" elementos do vetor A, ou seja, B[i] = A[i].

CASOS DE TESTE PALESTRANTE: MARCIA SILVA

Objetivos: i) Criar enlace ponto-a-ponto entre roteadores com protocolo HDLC ii) Criar uma infraestrutura de acesso baseada em PPPoE

MARINHA DO BRASIL COMANDO DO CONTROLE NAVAL DO TRÁFEGO MARÍTIMO GUIA RÁPIDO PARA MANUSEIO DO SISTEMA CRIPTOGRÁFICO ÁTRIA

Avaliação de Empresas Profa. Patricia Maria Bortolon

MicroWork TOUCH CHECKLIST

Administração Portal Controle Público

Curso de Formação de Oficiais Conhecimentos Específicos ENGENHARIA DE COMPUTAÇÃO CADERNO DE QUESTÕES

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

SUPERTEC2007 SINCRONISMO DETETOR DE MODOS MICRO

Boletim Técnico. Montagem do conteúdo de laudos. Produto : Microsiga Protheus - Medicina e Segurança do Trabalho - Versão 10

Projeto de Banco de Dados

Arquitecturas de Software Enunciado de Projecto

Experiência 04: Comandos para testes e identificação do computador na rede.

Disponibilizada a rotina Vale Presente (LOJA830) no módulo Controle de Lojas (SIGALOJA), assim como já é utilizada no módulo Front Loja (SIGAFRT).

Aula 11: Desvios e Laços

Sistema de Editoração Eletrônica de Revistas (SEER) Open Journal System (OJS) TUTORIAL SUBMISSÃO DE ARTIGOS

Introdução ao. Script. Baltazar Tavares (Psycho Mantys)

Formas de Pagamento Resumida Vendas Vendedor Vendas Vendedor Resumido Vendas Vendedor Caixa Vendas por Artigos...

Tópicos Avançados em Banco de Dados Dependências sobre regime e controle de objetos em Banco de Dados. Prof. Hugo Souza

T.I. para o DealerSuite: Servidores Versão: 1.1

Comércio e Manutenção de Produtos Eletrônicos. Mapeamento de memória e conexões do Controlador CP-WS13/8DI8DO2AI2AO/USB/OEM. Versão 1.

Transcrição:

5 Exemplo de Aplicação Para demonstrar os recursos oferecidos pelo LuaProxy para a adaptação dinâmica, esta dissertação apresenta o LuaEmpire, um jogo de estratégia espacial bem simples, cujo objetivo é conquistar os planetas de todos os adversários. Os participantes usam o LuaProxy para repassarem os comandos dos jogadores (por exemplo, movimentação de frotas) a um servidor compartilhado. O servidor armazena em uma grande tabela o estado global da galáxia, que se modifica com as ações dos jogadores e pela passagem tempo (como o progresso da construção de uma nave espacial). O servidor transmite as mudanças no seu estado a todos os jogadores periodicamente. A IDL do jogo se encontra na Figura 5.1. Para jogar, a pessoa deve criar um proxy para uma instância da interface Server (como mostrado nas Figuras 5.2 e 5.3), e chamar o método login, que requer o nome/apelido do jogador (nick) e um objeto de callback para receber as atualizações. O objeto de callback deve implementar a interface Client. O método login retorna uma string conto o estado inicial do jogo (posição dos planetas, frotas, etc.). O cliente converte a string em uma tabela (função loadstring de Lua), e a usa para armazenar as modificações enviadas do servidor pelo método update do objeto de callback. Os métodos createship, movefleet e attack são auto-explicativos. 5.1 Procedimento de Adaptação Como mostra a Figura 5.2, os parâmetros de QoS usados são a largura de banda (bandwidth) e o retardo (delay). Nos experimentos executados, os

Exemplo de Aplicação 44 module LuaEmpire interface Client typedef sequence<octet> OctetSeq; oneway void update (in OctetSeq changes); interface MigratingClient : Client oneway void migrate (in string offerid); interface Server string login (in string nick, in Client callback); long createship (in long planetid, inout long fleetid); void movefleet (in long id, in double x, in double y); void attack (in long id, in long targetid); void loadstate (in string state); void clock (); Figura 5.1: IDL do LuaEmpire p = LuaProxy ("LuaEmpire::Server", "delay < 40, high", "bandwidth > 80", impl) univ = p:login ("Joao", callback) Figura 5.2: Uso do LuaProxy Figura 5.3: Comunicação cliente-servidor no LuaEmpire.

Exemplo de Aplicação 45 if event == "bandwidth_decrease" then if not self.callback.compressupdates then -- Instrui cliente e servidor a compactarem dados self._proxy:setupdatecompression (self.nick, true) self.callback.compressupdates = true -- Relaxa atributo do QoS descriptor para 40 return true, 40 else return false Figura 5.4: Adaptação ao evento bandwidth decrease function callback:update (changes) if self.compressupdates then changes = lzo.decompress (changes) self:oldupdate (changes) Figura 5.5: Adicionando suporte à compactação servidores disponibilizam dstubs que interceptam o método login, de modo a capturarem o objeto de callback do jogador. Antes de chamar o método login do objeto remoto, o dstub acrescenta o método migrate ao objeto de callback, fazo-o implementar a interface MigratingClient. Esse método é usado na troca de servidor (discutido mais adiante). Para se adaptar à falta de largura de banda, a implementação de QoS (parâmetro impl do construtor) transfere um ustub ao servidor para estêlo com o método setupdatecompression. Esse método encapsula o proxy para o objeto de callback no lado do servidor, de modo a ligar/desligar a compactação das atualizações. O método update, pelo qual se recebem essas atualizações no lado do cliente, é encapsulado para que aceite dados normais ou compactados. A nova versão desse método (Figura 5.5) usa o campo especial CompressUpdates para determinar se a compactação de dados está ativa. Em caso afirmativo eles são descompactados antes de serem passados adiante, o que é feito de maneira transparente ao cliente. A arquitetura modificada da aplicação é mostrada na Figura 5.6. A implementação de QoS reage ao retardo diminuindo a freqüência com

Exemplo de Aplicação 46 Figura 5.6: Arquitetura modificada do LuaEmpire. function delay_increase:adapt (luaproxy) if client.callback.frameskip == 1 then client.callback.frameskip = 2 -- Requer retardo de 60. Sistema pode ser considerado -- recuperado quando retardo < 30. return true, 60, 30 else return false Figura 5.7: Adaptação ao evento delay increase que o cliente redesenha sua interface gráfica. Para tanto, a rotina de adaptação simplesmente ativa um flag que instrui o objeto de callback a atualizar seu estado interno normalmente, mas redesenhar a interface com o usuário somente a cada duas atualizações. Essa interação entre a rotina de adaptação e o objeto de callback é possível devido ao fato de ambos terem sido desenvolvidos pelo cliente para trabalharem conjuntamente. Caso a adaptação não seja possível, o LuaProxy usa seu método select para escolher outro servidor. Nesta aplicação, o dstub também redefine esse método, de modo que o estado do jogo seja automaticamente transferido para o novo servidor (método loadstate). Um dos jogadores (o que tiver o menor id) é eleito coordenador do processo de migração. Ele é responsável por encontrar o novo servidor no trader, transferir o estado do jogo para ele e difundir o novo servidor aos demais jogadores. Isso é possível porque o dstub este os objetos de callback com o método migrate, definido na interface MigratingClient. Ele recebe e armazena

Exemplo de Aplicação 47 function callback:update (changes) local t = assert (loadstring ("return ".. changes)) () -- Atualiza universo. table.foreach (t, function (id, object) self.universe [id] = object ) -- Flag FrameSkip controla o redesenho alternado de quadros. if not self.frameskip or math.mod (self.frameid, 2) == 0 then -- Redesenha tela do jogador. self.frameid = self.frameid + 1 Figura 5.8: Método update do objeto de callback. o id da nova oferta de serviço, fazo com que o jogador migre para o servidor especificado. 5.2 Roteiro de Testes Foram criados dois clientes e dois servidores, so estes configurados com diferentes níveis de recursos disponíveis inicialmente. A seguir, os clientes usaram o LuaProxy para se logarem no servidor, e, depois de alguns segundos os níveis de retardo e largura de banda foram reduzidos manualmente, de modo a simular esses eventos. Ao usarem o LuaProxy pela primeira vez, ambos os clientes selecionaram a mesma oferta de serviço, pois um dos servidores inicialmente dispunha de mais recursos. Ao criar uma referência ao servidor, o dstub foi automaticamente baixado e mesclado ao proxy. Interceptando o método login, o dstub capturou o objeto de callback, acrescentou o método migrate e encapsulou o update, conforme descrito na seção anterior. Ao ser notificado do evento bandwidth decrease, o dstub ativou o procedimento de compactação de dados, usando a biblioteca LuaLZO [16]. Como o volume de dados nesse exemplo foi muito pequeno, a compactação não diminuiu o volume de dados transferido, mas comprovou que a estratégia de adaptação entrou em vigor. Em um jogo com vários sistemas solares e

Exemplo de Aplicação 48 jogadores, as strings com as atualizações poderiam ser grandes o bastante para que o uso da compactação fizesse diferença. O evento delay increase ativou como o esperado a alternância de quadros. Como a interface gráfica ainda não está disponível, o método que o objeto de callback usa para redesenhar a tela do usuário simplesmente imprime as informações atualizadas na forma de texto. Finalmente, para demonstrar a troca de servidores, a largura de banda do que estava em uso foi reduzida a zero, forçando o LuaProxy a disparar o processo de migração. O primeiro jogador a logar selecionou o outro servidor e usou o método migrate para transmitir o id da nova oferta de serviço ao outro participante. Seu objeto de callback armazenou esse id, e a versão redefinida pelo dstub do método adapt migrou para o novo servidor. É interessante ressaltar que o único propósito dessa aplicação é o de testar o comportamento do LuaProxy em uma situação simulada. Por conta disso, e por falta de tempo para desenvolver um exemplo mais completo, alguns detalhes não foram tratados. Por exemplo, quando a rotina de adaptação ativa a compressão de dados, não é possível saber ao certo se a próxima atualização do servidor virá compactada ou não. Isso depe de qual método chega ao servidor primeiro: o setupdatecompression ou o próximo clock. Em aplicações comerciais seria necessário examinar a string com a atualização para detectar se ela contém texto ou caracteres binários.