Você está na página 1de 6

Hangman

Aplicao distribuda usando REST

Sistemas Distribudos 2014/15


Mestrado Integrado em Engenharia Informtica e Computao

SDIS1415-T3G02

Joo Monteiro
, ei11055@fe.up.pt
Joo Varandas
, ei11082@fe.up.pt
Mauro Costa
, ei11063@fe.up.pt
Miguel Tavares
, ei11069@fe.up.pt

5 de Junho de 2015

ndice
Introduo
Arquitetura
Implementao
Situaes relevantes
Concluso
Referncias

Introduo

A aplicao que nos propusemos a fazer uma variao do conhecido jogo


da forca. Os jogadores comunicam atravs de HTTP, usando uma arquitetura REST
e
peer-to-peer
. O objetivo do jogo ser o primeiro a adivinhar uma palavra
escolhida por um dos jogadores.
Qualquer
peer pode criar um novo jogo ou juntar-se a um jogo em progresso.
Para evitar ambiguidade, chamaremos a um
peer que tiver iniciado um jogo
host
.
Assim, o
host precisa de escolher a palavra que quer que os outros
peers
adivinhem, bem como uma imagem que sirva de pista para a palavra e o nmero de
peers
que pretende que se juntem ao jogo.
Os
peers tentam simultaneamente adivinhar a palavra escolhida pelo
host
,
tendo ao seu dispr apenas o nmero de letras da palavra e a imagem escolhida
pelo
host
. Cada
peer tem 5 vidas; ao adivinhar erradamente uma letra ou a palavra
completa, perdem uma vida. Se no fizerem nenhuma tentativa durante trinta
segundos, tambm perdem uma vida. Se chegarem a 0 vidas, deixam de poder
jogar.
medida que forem tentando letras e palavras sem sucesso, estas aparecem
a todos os jogadores de modo a estes saberem que no vale a pena voltarem a
tentar us-las. Em baixo podem ver-se algumas das interfaces desenvolvidas.

Fig 1.
Menu inicial do jogo.

Fig 2.
Ecr de novo jogo.

Neste relatrio iremos fazer uma anlise da arquitetura utilizada,


especificando os protocolos utilizados na interao entre as vrias componentes,
seguida de uma anlise da implementao que fizemos. Concluiremos com uma
2

anlise do trabalho realizado e com o peso da colaborao de cada membro do


grupo.

Arquitetura

Como j referimos, esta uma aplicao


peer-to-peer
, em que cada
peer se
pode tornar num
host caso crie um jogo novo. Cada
peer identificado por um ID e
pelo seu IP, podendo tambm escolher um nome de utilizador. A comunicao
entre eles segue um protocolo REST, com pedidos POST para tentativas de
resoluo da palavra e pedidos PUT para atualizaes do estado de jogo.
Cada
peer guarda localmente as informaes do estado do jogo, a que o
jogador tem acesso: quais as letras j desvendadas da palavra, quais as letras j
tentadas mas que no pertencem palavra, quais as palavras j tentadas mas que
no correspondem resposta, a imagem de pista, o seu nmero de vidas e que
outros jogadores se encontram em jogo.

Quando um novo
peer entra no jogo, o seu reconhecimento feito por um
tracker
, no qual so armazenados os estados de jogo e informao sobre os
peers
que se encontram em jogo. Ao fazer uma tentativa de resposta, o
peer envia para o
tracker a letra ou palavra e cabe a este atualizar o estado do jogo e envi-lo a todos
os
peers
, uma vez que estes no sabem qual a palavra a ser adivinhada.
A imagem selecionada pelo
host como pista obtida atravs da API do
Flickr. Para isso, recorreu-se ao uso do mtodo flickr.photos.search, ao qual se
fornece o termo de pesquisa utilizado pelo
host como
tag e se organizam os
resultados, permitindo ao utilizador ver nove fotografias por pgina.

Implementao

Ns utilizamos um
tracker como maneira de manter registo dos jogos
(guarda e serve os endereos dos
peers e o estado do jogo). Para o desenvolver
recorremos plataforma
node.js com a framework
Express
. Decidimos utiliz-las
devido familiaridade que tnhamos com elas (uma vez que j havamos usado
ambas anteriormente), bem como sua simplicidade de implementao.

No desenvolvimento dos
peers utilizmos
Java com servidor
Jetty
para a
vertente de rede. A sua escolha baseou-se na na simplificao que permitem no
desenvolvimento de rotas RESTful, utilizadas neste projeto.
As mensagens so responsabilidade do
Communicator.java
, utilizando um
protocolo HTTP e baseando-se num paradigma RESTful. De modo a modularizar a
aplicao, utilizamos funes bsicas de envio de pedidos PUT, POST, GET e
DELETE que recebem o URL alvo e quaisquer parmetros relevantes. Deste modo
conseguimos simplificar as interfaces de comunicao e tornar as componentes
mais independentes e modulares.

Situaes relevantes

Infelizmente, no tivemos possibilidade de implementar funcionalidades


relativas segurana, tolerncia de falhas e consistncia por falta de tempo.

Concluso

O trabalho foi desenvolvido ao longo das aulas e fora destas, mas poderia
ter sido realizado de forma mais constante ao longo do tempo, uma vez que grande
parte das funcionalidades foi implementada na fase final do prazo estabelecido.
Como melhoria, poderamos implementar um sistema de jogadas por turnos,
adaptando o
timer j existente para controlar o tempo de jogada de cada
peer e
permitindo a todos os outros verem as suas jogadas em tempo real. Se tivssemos
oportunidade para isso, gostaramos tambm de desenvolver novas
funcionalidades como a troca de mensagens entre
peers ou a implementao de
sistemas de
buffs e
handicaps que permitissem maior interatividade entre
peers
,
bem como o desenvolvimento dos objetivos extra como a tolerncia de falhas e
segurana.
Segue uma breve descrio das contribuies de cada membro do grupo
para o projeto, bem como uma estimativa da percentagem de participao de cada
um no desenvolvimento do mesmo:
Joo Monteiro (15%): juntamente com o resto do grupo, participou na fase
inicial da concepo do projeto; ajudou tambm a delinear as funcionalidades a
implementar e os protocolos a utilizar juntamente com o Mauro. Desenvolveu
tambm com o Mauro as classes da lgica, bem como o relatrio.

Joo Varandas (60%): projetou e desenvolveu por inteiro o componente do


tracker
e a interface grfica da componente Java, assim como as rotas de
comunicao para as mensagens do protocolo das classes Peer e Host e a maioria
da sua utilizao.
Mauro Costa (15%): juntamente com o resto do grupo, participou na fase
inicial da concepo do projeto; ajudou tambm a delinear as funcionalidades a
implementar e os protocolos a utilizar juntamente com o Joo Monteiro.
Desenvolveu tambm com o Joo Monteiro as classes da lgica, bem como o
relatrio.
Miguel Tavares (10%): participou na fase inicial de concepo do projecto e
tratou da comunicao feita com a API do Flickr.

Referncias

https://www.flickr.com/services/api/flickr.photos.search.html

Você também pode gostar