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