Você está na página 1de 13

Licenciatura em Tecnologias e Sistemas de Informao -

Disciplina de Arquitecturas e Sistemas Operativos II


1 Semestre, 2013/2014





Ttulo: JOGO DE FUTEBOL DISTRIBUDO
Autores: 65767 Joo Rafael Almeida
Assunto: Trabalho Prtico N2
Data: 13-01-2014







Trabalho efetuado no mbito da disciplina de
Arquitecturas e Sistemas Operativos II
da Licenciatura em Tecnologias e Sistemas de Informao
Docente (s) responsvel (eis)
Jos Nuno Panelas Nunes Lau
Joo Manuel Rodrigues

Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

2


ndice
Introduo .................................................................................................................. 3
Funcionamento do Projeto ................................................................................. 4
Descrio do ficheiro SoccerGameServer .......................................... 6
Descrio do ficheiro ClientManager ................................................. 7
Descrio do ficheiro SoccerGameSock ............................................... 8
Descrio dos ficheiros GoalieClient, PlayerClient e
RefereeClient .................................................................................................... 10
Ficheiro SoccerGameSemaphore ................................................................ 11
Em concluso ........................................................................................................... 12
Referncias .............................................................................................................. 13


Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

3


Introduo
Neste documento sero descritos todos os procedimentos
utilizados no desenvolvimento deste projeto. Ser descrito
a forma como elaborei o projeto explicando passo por passo
o meu raciocnio.
O projeto consiste em reutilizar o trabalho prtico
n1 e fazer com que seja possvel executa lo de forma a
simular a existncia de um servidor e clientes, sendo estes
o jogadores, guarda-redes e o rbitro.


Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

4


Funcionamento do Projeto
Este projeto consiste na simulao de um jogo de
futebol, este jogo ir decorrer numa classe designada por
servidor, e os elementos do jogo sero designados por
clientes.
O servidor que est localizado na classe
SoccerGamerServer, utiliza uma thread para facilitar a
comunicao com os clientes, designada por ClientManager.
Para cada tipo de elemento do jogo, ou seja, para os
clientes, existe uma classe onde realizada a criao e
inicializao do SoccerGameSock e de uma thread, seja do
jogador, guarda-redes ou arbitro.
A partir do momento em que o servidor est em execuo
os clientes podem tentar conectar-se a este. A classe
SoccerGameSock est encarregue de fazer essa conexo e a
partir deste momento as comunicaes servidor-cliente e
cliente-servidor sero realizadas pelo ClientManager e
SoccerGameSock.
A thread iniciada pelo cliente tem um conjunto de
funes a executar e para isso vai solicitar ao
SoccerGamerSock a execuo destas funes, por sua vez este
ter de enviar um pedido ao servidor e aguardar resposta.
O ClientManager vai verificar o pedido, se estiver
dentro do protocolo ento executa a funo pretendida que
est localizada no SoccerGameSemaphore e envia uma resposta
ao cliente.

Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

5


A resposta recebida pelo cliente no SoccerGameSock
verificada e se estiver dentro dos parmetros do protocolo
o programa continua a sua execuo.
Caso existe alguma falha no decorrer destas
comunicaes, o projeto est preparado para evitar essas
falhas, verificando sempre todas as mensagens recebidas e
enviadas, para quando alguma esteja corrompida e viole o
protocolo, a conexo terminada deixando uma mensagem de
erro ao cliente.




Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

6


Descrio do ficheiro SoccerGameServer
Neste ficheiro, onde est localizado o cdigo
referente ao servidor.
Numa fase inicial lido com um ficheiro que contm os
parmetros necessrios para o funcionamento do programa,
caso no exista esse ficheiro, o projeto est preparado
para funcionar com parmetros predefinidos.
Para que o utilizador saiba se est a lidar com
ficheiro ou com os parmetros predefinidos, decidi fazer um
pequeno grupo de cdigo que apresenta uma saudao e os
parmetros no ecr do servidor.
_____________ SoccerGameServer2013 _____________
| |
| Reading File: c:\\args.txt |
|__________________________________________________|
| |
| File was successfuly read! |
| Number of Players: 8 |
| Number of Goalies: 2 |
| Number of Referee: 1 |
|__________________________________________________|
Fig. 1 Output de saudao no servidor quando lido um ficheiro

De seguida, criei um array de thread do tipo
ClientManager, sendo este inicializado quando um cliente se
conecta ao servidor, desta forma essa thread interage com o
cliente durante a conexo.
Para terminar fiz algumas verificaes para o caso de
haver erros de conexo.

Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

7


Descrio do ficheiro ClientManager
Este ficheiro serve para comunicar com o ficheiro
SoccerGameSock.
No construtor tive de usar variveis temporrias para
conseguir inicializar as variveis, in e out, de outra
forma no era possvel.
Na funo run, envio a saudao e os parmetros para o
cliente, e verifico se o socket est conectado.
if (!sock.isConnected())
System.err.println("ClientManager: Ligao sem sucesso...");
Cod. 1 Verificao se o socket se conectou

Caso a ligao seja realizada com sucesso, o programa
fica a aguardar uma mensagem da parte do cliente, verifica
se possvel responder, e responde, voltando a aguardar
por nova mensagem. Caso acontea algum tipo de erro,
apresentado uma mensagem de erro e a conexo terminada.
System.err.println("BROKEN PROTOCOL!");
sock.close();
Cod. 2 Acontecimento em caso de violao do protocolo

No final, quando o programa deixa de receber mensagens
fecha o socket terminando assim a ligao.
Utilizei a funo flush em todos os envios de
mensagens por parte do ClientManager para evitar erros de
comunicao.

Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

8


Descrio do ficheiro SoccerGameSock
Neste ficheiro, como no ficheiro ClientManager, tambm
tive de inicializar as variveis in, out e sock usando
variveis temporrias, isto porque as variveis usadas no
trabalho so do tipo final e s podem ser inicializadas uma
vez dentro do construtor.
No construtor recebido uma saudao e os parmetros
por parte do servidor. feita uma verificao para que no
haja falhas no protocolo.
No SoccerGameSock, todas as funes enviam um mensagem
ao servidor, recebem resposta, verificam se no houve
violao do protocolo e devolvem algum valor ou caso no
seja necessrio devolver valor continuam a execuo normal
do programa.
Mas, na funo playerConstituteTeam, h uma condio
extra que fecha a conexo do socket. Se o servidor enviar a
mensagem PLAYERFALSE, este termina a conexo, no que
seja um erro, mas sim porque este jogador no pertence a
nenhuma equipa ento no pode continuar conectado.
send = "true".equals(line.substring(6));
System.out.println("Player - playerConstituteTeam");
if(!send)
sock.close();
Cod. 3 Encerramento de conexo do socket num caso particular

Na funo playUntilEnd e endGame acontece algo
idntico, o socket fechado pois no vai existir mais

Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

9


comunicaes dali em diante, existe de igual modo a
verificao do protocolo mas este encerramento do socket
no uma violao do protocolo.


Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

10


Descrio dos ficheiros GoalieClient,
PlayerClient e RefereeClient
Nestes trs ficheiros o funcionamento idntico, pois
este trata apenas da inicializao da thread.
Por predefinio eles so conectados ao local host,
mas se quando forem executados o utilizador colocar em
argumento o IP do servidor, estas classes reconhecem a
existncia do argumento e fazem a conexo ao servidor
atravs do IP fornecido.
De seguida a classe cria uma varivel do tipo
SoccerGameSock e inicializa a thread usando a varivel
criada como argumento.
Com este processo, acontece que o jogador, guarda-
redes ou o rbitro quando iniciam o seu programa, so
realizadas algumas verificaes e realizada uma conexo
ao servidor usando o SoccerGameSock como interface de
apoio.



Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

11


Ficheiro SoccerGameSemaphore
Houve uma reutilizao deste ficheiro, j usado no
trabalho prtico n1, mas como este continha alguns erros,
realizei as devidas correes.
Os principais erros que tive de corrigir, foram a
implementao do semforo mutex em algumas funes que
inicialmente estavam a trabalhar com variveis partilhadas
de uma forma desprotegida.
Nas funes de registo existe uma falha podendo levar
ao registo de elementos com o id errado, esta falha foi
corrigida com a implementao de uma varivel temporria
no partilhada, que recebia o valor dentro da zona critica
e devolvia o valor thread fora da zona critica, no
afetando de forma nenhuma o seu valor.
Outro erro grave, foi a apresentao dos elementos de
cada equipa, sendo este feito na funo incorreta e de
forma incorreta. Para solucionar o problema tive de
implementar dois semforos de apoio e uma varivel de
contagem e realizar o algoritmo na funo correta.


Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

12


Em concluso
Com este projeto tive a oportunidade de corrigir os
erros que realizei no primeiro trabalho prtico, e de
compreender o funcionamento dos sockets.
No decorrer do projeto tive algumas dificuldades,
principalmente na verificao do protocolo e na preveno
de erros mas todas foram superadas com sucesso.
No final, depois de terminado, percebi a grande
importncia desta matria para o futuro, mesmo sendo numa
base didtica a utilizao dos sockets permite a criao de
solues muito mais eficientes e tambm permite a
comunicao entre mquinas de uma forma bastante simples.


Licenciatura em Tecnologias e Sistemas de Informao -
Disciplina de Arquitecturas e Sistemas Operativos II

13


Referncias
1. Nuno Lau, Arquiteturas e Sistemas Operativos -
Socket, Aveiro, DETI/UA, 2013/2014, 10 slides
2. Auto desconhecido, Apndice Sockets,
http://www.caelum.com.br/apostila-java-orientacao-
objetos/apendice-sockets/, 5 de Janeiro de 2014

Você também pode gostar