UNIVERSIDADE FEDERAL DE SANTA CATARINA BACHARELADO EM CIÊNCIAS DA COMPUTAÇÃO RELATÓRIO DE INTRODUÇÃO AO PROJETO ALUNO: LEONARDO DE S. BRASIL MATRICULA: 04132513 ORIENTADOR: RICARDO PEREIRA E SILVA PROFESSOR: RENATO CISLAGHI UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSCTICA CURSO DE BACHAREL EM CIÊNCIA DA COMPUTAÇÃO PROJETO DE PESQUISA Sumário TÍTULO............................................................................................................................................. 3 PROPONENTE................................................................................................................................. 3 JUSTIFICATIVA................................................................................................................................ 3 1 OBJETIVOS.................................................................................................................................... 5 1.1 OBJETIVO GERAL.................................................................................................................................. 5 1.2 OBJETIVO ESPECÍFICO......................................................................................................... 5 METODOLOGIAS............................................................................................................................. 6 CRONOGRAMA............................................................................................................................... 6 TECNOLOGIAS QUE SERÃO EMPREGADAS............................................................................... 7 1.3 COMUNICAÇÃO CLIENTE/SERVIDOR (RMI).......................................................................................... 7 CONCLUSÂO................................................................................................................................. 11 REFERÊNCIAS BIBLIOGRÁFICAS............................................................................................... 12 2 UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSCTICA CURSO DE BACHAREL EM CIÊNCIA DA COMPUTAÇÃO PROJETO DE PESQUISA TÍTULO Servidor multi-jogos. PROPONENTE Leonardo de Souza Brasil JUSTIFICATIVA Os jogos estão presentes na história da humanidade desde o seus primórdios. Com a evolução dos computadores e a criação das primeiras redes, com destaque para a internet, foi possível simular os jogos através de computadores em ambientes virtuais onde jogadores mesmo distantes fisicamente, compartilham do mesmo tempo e espaço “virtuais”. Surge nesse momento o conceito de jogos distribuídos ou jogos multi-jogadores. Jogos multi-jogadores são jogos de computador que permitem a participação simultânea de vários jogadores em uma mesma partida. Com a computação distribuída os jogos começaram a ser jogados por diversas pessoas ao mesmo tempo, estando elas em qualquer parte do mundo. Nesses jogos multi-jogadores, o procedimento normalmente realizado é o seguinte: O usuário (jogador) inicia seu jogo com o intuito de jogar via redes, ele então localiza um servidor onde seu jogo esteja rodando e solicita uma conexão nesse servidor, o jogador é então autorizado e pode iniciar partidas com outras pessoas que também estejam conectadas. O jogador realiza operações que são enviadas para os outros jogadores de forma que seus jogos sempre possuam o estado atual do jogo. O servidor simula o jogo, sincroniza os estados dos 3 jogadores e sinaliza quando o jogo termina, normalmente com a vitória de um dos jogadores. Essa conexão também envolve aspectos de segurança de comunicação via redes e de controles de trapaças, etc... Dentro desse procedimento é possível identificar aspectos que são comuns para diversos jogos. O único aspecto diferente é a forma como cada jogo é implementado, com suas regras e operações específicas. Seguindo as melhores práticas de Engenharia de Software, a proposta desse trabalho é desenvolver um servidor multi-jogos, levando em conta o reuso dos aspectos acima citados. Esse servidor será abstrato no sentido de poder realizar a comunicação via rede entre jogos de diferentes desenvolvedores. Através dele será possível gerenciar as partidas de cada jogo de modo que ele controle o estado de cada partida e seus jogadores. Para que um jogo qualquer possa se conectar ao servidor e para facilitar o desenvolvimento de jogos para esse servidor a proposta é desenvolver um framework orientado a objetos que deve ser utilizado pelo desenvolvedor do jogo. 4 1 OBJETIVOS 1.1 OBJETIVO GERAL Desenvolver um servidor multi-jogos e um framework orientado a objetos que possibilite o uso do servidor por desenvolvedores de jogos. 1.2 OBJETIVO ESPECÍFICO • Analisar tecnologias de computação distribuída em java. • Escolher a tecnologia que melhor se encaixe para o projeto proposto • Desenvolver o servidor multi-jogos; • Desenvolver o framework cliente. • Validar o projeto desenvolvendo uma aplicação cliente que utilize o framework desenvolvido e o servidor implementado. 5 METODOLOGIAS Primeiro, decidiu-se realizar um estudo sobre tecnologias de computação distribuída em Java que melhor se adaptem ao projeto. Em seguida, estudar profundamente a tecnologia escolhida e montar o projeto na fase de Análise e Projeto. Após isso, desenvolver o servidor e o cliente paralelamente. A última fase consiste em desenvolver um jogo exemplo que servirá para mostrar o funcionamento da arquitetura proposta. CRONOGRAMA ETAPA Estudo RMI Análise e Projeto Implementar Servidor Implementar Cliente ETAPA Implementar Servidor Implementar Cliente Desenvolver aplicação teste Março x Agosto X x x Abril x x Setembro x Maio Junho Julho x x x Outubro x x Novembro x x Dezembro X 6 TECNOLOGIAS QUE SERÃO EMPREGADAS 1.3 Comunicação Cliente/Servidor (RMI) Considerando que o aplicativo servidor será implementado em linguagem Java, assim como os futuros jogos que utilizarão a arquitetura, foi realizada uma pesquisa sobre tecnologias Java que possibilitavam essa implementação levando em conta requisitos não funcionais, como facilidade de desenvolvimento, menor tempo de resposta, menor uso de banda, segurança e facilidade de uso. Após uma pesquisa sobre possíveis tecnologias cliente/servidor em Java, decidiu-se pelo uso de RMI. O que é. RMI (Remote Method Invocation) é uma das abordagens da tecnologia Java para prover as funcionalidades de uma plataforma de objetos distribuídos. Esse sistema de objetos distribuídos faz parte do núcleo básico de Java desde a versão JDK 1.1, com sua API sendo especificada através do pacote java.rmi. Através do RMI é possível realizar a comunicação entre objetos que estão em diferentes Máquinas Virtuais Java (JVM). Sendo possível, inclusive, transferir objetos serializados através da rede. 7 Como funciona O RMI é baseado em uma arquitetura cliente/servidor, ou seja, existe o programa cliente que deseja realizar chamadas a um aplicativo remoto que se comporta como o servidor. Para que essa comunicação se realize o RMI fornece objetos “auxiliares” que facilitam a comunicação entre cliente e servidor, liberando o desenvolvedor de se preocupar com todo o código envolvido nessa troca de informações. Do lado do cliente existe um auxiliar que captura a chamada realizada pelo cliente e envia essa chamada para o servidor, esse auxiliar é chamado de Stub. O servidor por sua vez, também possui um auxiliar, chamado Skeleton, que captura a chamada passada por um Stub e chama o método no servidor. Com esse esquema de objetos “auxiliares” o RMI realiza a chamada a objetos remotos simulando-os na máquina do cliente. Outro aspecto importante no RMI é a interface remota. Existe entre cliente e servidor uma interface remota de métodos. Essa interface permite que o cliente conheça as funções pré-estabelecidas que ele tem acesso no servidor. Essa interface define essas funções junto com seus parâmetros e retornos. Caso ocorra algo de errado na comunicação é lançada uma exceção do tipo RemoteException que deve sempre ser capturada e tratada pelo cliente. Tanto o Stub, do lado do cliente, quanto o Skeleton, do lado do servidor, são criados a partir dessa interface remota. No lado do servidor existe uma ou mais classes que implementam realmente essa interface remota. Para que o cliente decida para qual implementação da interface remota deseja se comunicar é necessário que o servidor registre seu serviço remoto. Isso é feito através de um cadastro no registro RMI. O registro RMI é similar a uma página de cadastro telefônico, ela possui um nome para o serviço e o local de sua implementação no servidor. Esse registro 8 RMI deve ser sempre iniciado pelo servidor e chamado pelo cliente quando deseja utilizar um dos métodos da interface remota. Vantagens do uso do RMI Orientação a Objetos – Além dos tipos primitivos java, como por exemplo int, boolean,char. É possível, usando RMI, passar objetos como parâmetros de funções e obter objetos java como retorno de funções, além de tipo primitivos. Devido a isso, não é necessário nenhum código extra para “montar” e “desmontar” objetos no cliente. “Mover o comportamento” – Usando-se do fato de ser possível mover objetos através de JVM’s, com RMI é possível trabalhar com interfaces e passar objetos que implementam essas interfaces em tempo de execução. Dessa forma é possível “mover o comportamento” para o outro lado da comunicação. Padrões de Projeto – O fato de ser possível passar objetos serializados do cliente para o servidor garante o uso de todo o poder do paradigma de orientação a objetos na computação distribuída. Como é possível “mover o comportamento” com o uso de interfaces java é possível usar padrões de projeto orientado a objetos facilmente. Segurança – Por fazer parte da API do java, RMI usa todo o mecanismo de segurança de Java, já bastante maduro. Facilidade para usar – RMI possui uma estrutura simples (como vista a anteriormente). Portabilidade – Essa característica é herdada pelo fato de RMI ser 100% Java. Se utilizado com JNI (Java Native Interface) é possível construir aplicativos java que se comuniquem com outro sistemas já existentes. Programação Paralela – RMI é multi-thread, garantindo que as requisições dos clientes sejam atendidas sem necessidade código extra. 9 Foi visando essas vantagens e aliando as necessidades do projeto que se decidiu pelo uso de RMI neste trabalho. Ele se adapta perfeitamente as necessidades do servidor, principalmente no que se refere a segurança e concorrência. 10 CONCLUSÂO Esse relatório apresenta um primeiro resultado visando o Trabalho de Conclusão de Curso. Foram apresentados: o tema proposto, metodogias, um cronograma preliminar e a solução tecnológica RMI que foi adotada após a comparação com outras alternativas tecnológicas. 11 REFERÊNCIAS BIBLIOGRÁFICAS 1.SIERRA, Kate; SIERRA, Bert. Head First Java, 2ª ed. Alta Books Ltda, 2005. 2. Remote Method Invocation (RMI). Disponível em : <http://java.sun.com/javase/technologies/core/basic/rmi/whitepaper/index.jsp#10>. Acesso em 19 fev. 2007 3. Java RMI. Disponível em: <http://www.dca.fee.unicamp.br/cursos/PooJava/objdist/javarmi.html> Acesso em 20 fev. 2007 Orientador: Ricardo Pereira e Silva Assinatura: ____________________________ 12