Artigo no estilo: Curso

Por que eu devo ler este artigo:Este artigo é útil para desenvolvedores que tenham interesse em construir uma arquitetura para jogos multiplayer que possa realizar integração entre Cliente e Servidor de uma forma eficiente e independente da tecnologia de comunicação utilizada. O artigo mostrará duas implementações distintas para a camada de comunicação, uma empregando Sockets e outra empregando o padrão REST. Nesse processo será demonstrado que é possível construir a arquitetura de um jogo de forma que uma eventual modificação na tecnologia utilizada para a integração não cause nenhum impacto.

Na primeira parte desse artigo, apresentamos uma proposta de um jogo multiplayer constituído por uma arquitetura Cliente-Servidor que utiliza a plataforma Android para a implementação do lado Cliente. O artigo apresentou o desenvolvimento do lado Cliente através de tópicos como a escolha da versão do Android, o tratamento de eventos, a animação de imagens, entre outros.

O artigo também abordou a construção do protocolo de comunicação entre Cliente e Servidor utilizando os conceitos de separação de camadas e desenvolvimento por interfaces, com o objetivo de se construir uma solução mais robusta.

Nesta segunda parte do artigo, iremos apresentar o desenvolvimento do lado Servidor utilizando a linguagem Java e a implementação do protocolo de comunicação deste com o Cliente. Os conceitos já mencionados de separação de camadas e desenvolvimento por interfaces serão demonstrados na prática através de duas implementações distintas para o protocolo, uma utilizando Sockets e outra utilizando o padrão REST.

Servidor

Como explicamos anteriormente, para um jogo multiplayer, além da implementação do lado Cliente, é necessário implementar um lado Servidor para centralizar as regras do jogo e realizar a comunicação entre os diversos clientes. No caso do jogo SpaceTip, a arquitetura do lado Servidor é composta por classes básicas da Java SE. Portanto, para iniciar o projeto do Servidor, basta criar um Java Project. Nesse exemplo, o projeto criado foi chamado de “SpaceTipServer” e seu diagrama de classes está ilustrado na Figura 1.

Figura 1. Diagrama de classes do Servidor.

O Servidor funciona da seguinte forma:

1. Jogador1 entra na Partida;

2. Jogador2 entra na Partida;

3. Partida envia PedirPosicionamento aos dois jogadores;

4. Partida recebe NavesPosicionadas do Jogador1;

5. Partida recebe NavesPosicionadas do Jogador2;

6. Partida envia InicioDeJogo aos dois jogadores, identificando de qual é o turno;

7. Partida recebe Atirar do Jogador em turno;

8. Partida envia ResultadoTiro aos dois jogadores, mudando o jogador em turno;

9. O fluxo de Atirar se repete até a partida encerrar.

Comunicação entre Cliente e Servidor

Uma vez que as lógicas do Cliente e Servidor estejam implementadas, o próximo passo é implementar o protocolo de comunicação entre os dois, ou seja, implementar as interfaces ProxyCliente e ProxyServidor.

Ao implementar a comunicação, é extremamente importante manter a abstração em relação à lógica do jogo. Isso significa que as lógicas referentes ao jogo do lado Cliente e do lado Servidor não precisam e não devem ter conhecimento de como a comunicação é de fato implementada. O que deve ser feito é, na verdade, uma separação de camadas, para que uma modificação na tecnologia utilizada para comunicação não interfira na lógica do jogo e vice-versa.

No desenvolvimento de um jogo, o isolamento em camadas é fundamental para garantir a portabilidade do aplicativo entre as diferentes plataformas existentes no mercado. Ela é importante também para garantir flexibilidade para mudar de tecnologia, seja do lado Cliente ou do lado Servidor, algo muito comum em um mercado tão dinâmico, que evolui rapidamente.

Para demonstrar o isolamento entre as lógicas do jogo e da comunicação, foram implementadas duas formas de comunicação bem distintas. Uma implementação foi feita através da tecnologia Socket e a outra foi feita empregando a tecnologia REST.

Comunicação Socket

Para implementar a comunicação via Socket, utilizaremos o mesmo projeto SpaceTipServer, já montado para a lógica do Servidor. A implementação utiliza as classes básicas de Socket e ServerSocket presentes na Java SE para comunicar Cliente e Servidor através da serialização de objetos, trocados entre os dois lados.

Os objetos trocados entre Cliente e Servidor estão ilustrados na Figura 2. Estes objetos são POJOs simples, seguindo o design pattern Transfer Object, e por isso são ...

Quer ler esse conteúdo completo? Tenha acesso completo