Lab5 Adriano Brasileiro

aluno: Adriano Brasileiro Silva
ano/sem: 2008/2o.
data do laboratório (num. da semana) : 22/12/2008 (5)

Introdução

Nesta prática pegamos um sistema de "bolão" pronto e implementamos uma comunicação entre servidos e um cliente, que será criado na próxima prática

Desenvolvimento

Melhoria nos decorators

Não há muito o que explicar, visto que foram seguidas as instruções indicadas na prática. Ao final das implementações, o teste não acusa nenhum erro

Criação dos builders

Mais uma vez foram implementados segundo o que nos foi instruído. Não houveram problemas

Criação do protocolo

Optei por utilizar a sintaxe de yaml, que é mais fácil de entender e trabalhar, já que a maioria de suas funções já estão prontas
Neste caso, foi necessário apenas criar um novo printer, o "yaml_match_printer", para escrever as informações sobre uma partida, pois o "yaml_match_list_printer", que lista informações sobre todas as partidas, já havia sido criada.

O servidor recebe um pedido no seguinte formato, um pouco diferente do indicado nas instruções:

INICIO
---
request:
 operation: "nome da operação"
 parametro1: "os parâmetros são passados junto com a operação,"
 parametro2: "e não em uma array separada"
 ...
FIM

O servidor então entra em um switch com base na operação e vai para a função correspondente. Uma vez entrado na ramificação, o servidor pode enviar uma resposta imediatamente caso seja necessário (como no login). Após processar o pedido, o método "read" do RequestReader é encerrado e o método main o chama novamente, fazendo com que se espere por outro pedido (pode-se ver o momento em que o servidor espera por um pedido quando se imprime em $stdout a palavra "READY".

Servidor Multithread

O arquivo server.rb contém o código do servidor. Nesta parte houveram alguns problemas que eu tive que contornar de maneira um pouco inconveniente: o require 'initialize' feito no topo do código não criava o logger e nem o método "to_score", de modo que passei essas linhas do "initialize" direto para o "server". Inclusive, aparentemente o "initialize" não fazia require em todos os arquivos, pois ainda foi necessário fazer require em vários arquivos. De qualquer modo, ao ser inicializado, o servidor cria a match_list e a user_list através dos builders e espera por novas conexões. Então cada conexão entra na função main em uma thread separada.

Testes

Criei cinco partidas que estão armazenadas em matches.yml, sendo três em andamento e duas finalizadas. Conectando-se ao servidor com o telnet e fazendo uma operação simples:
lab5-1.PNG
O formato não é muito conveniente mas é possivel ver que há comunicação com o servidor

Conclusões

Esta prática foi bastante difícil, principalmente para se entender o que deveria ser feito, já que nunca tínhamos visto sobre esta comunicação entre servidor e cliente. Mas foi uma prática muito interessante e que proporcionou um grande aprendizado, uma vez concluído.

A contagem de linhas para o lab6 foi de 277 linhas (linhas adicionadas, contando linhas em branco)

O código fonte, assim como em todos os outros labs, encontra-se em anexo

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License