aluno: Nome do Aluno
ano/sem: 2008/2o.
data do laboratório (num. da semana) : 06/08/2008 (2)
Introdução
Esse laboratório é a continuação do laboratório 5. Nele foi desenvolvida a parte do cliente que irá se comunicar com o servidor do lab5. O projeto foi desenvolvido em Ruby e foi utilizado o Shoes para a interface gráfica.
Desenvolvimento
O código do cliente é mostrado abaixo:
require 'socket' require 'yaml' Shoes.app :title => "Cliente", :width => 300, :height => 400 do flow :margin=>5 do para "Bolao Virtual", :font=>50 button "Criar Usuario", :width=>"90%" , :margin=>20 do window :title => "Criar novo usuário", :width => 300, :height => 400 do stack :margin=>10 do stack :margin=>10, :width=>100 do para "Nome" @username=edit_line :width=>"100%" end stack :margin=>10, :width=>100 do para "Senha" @senha=edit_line :width=>"100%" @senha.style :secret=>true end flow :margin=>10 do button "Criar Novo Usuario", :center=>true do $cliente = TCPSocket.new('127.0.0.1', 4344) $cliente.puts "INICIO" $cliente.puts( { "request" => { "operation" => "criar_usuario", "username" => @username.text, "password" => @senha.text } }.to_yaml ) $cliente.puts "FIM" string = $cliente.gets alert"Usuario Criado" close end end end end end button "Logar", :width=>"90%", :margin=>20 do window :title => "Fazer login", :width => 300, :height => 400 do stack :margin=>10 do stack :margin=>10, :width=>100 do para "Nome" @username=edit_line :width=>"100%" end stack :margin=>10, :width=>100 do para "Senha" @senha=edit_line :width=>"100%" @senha.style :secret=>true end flow :margin=>10 do button "Logar Usuario", :center=>true do $cliente = TCPSocket.new('127.0.0.1', 4344) $cliente.puts "INICIO" $cliente.puts( { "request" => { "operation" => "autenticar_usuario", "username" => @username.text, "password" => @senha.text } }.to_yaml ) $cliente.puts "FIM" string = $cliente.gets alert"Usuario Logado" close ################################################################# ##### AQUI EH ABERTA A JANELA COM AS POSSIVEIS OPERACOES ####### ################################################################# w=window :title=>"Bolao Virtual", :width => 300, :height => 280 do flow do para "Selecione uma das opcoes abaixo: ", :font=>40 button "Listar Partidas Atuais", :width=>"90%", :margin=>5 do $cliente.puts "INICIO" $cliente.puts( { "request" => { "operation" => "listar_partidas_atuais" } }.to_yaml ) $cliente.puts "FIM" loop do string = $cliente.gets break if string && string.include?("INICIO") end yaml = $cliente.gets("\nFIM") yaml = yaml.chomp("FIM") window :title => "Partidas Atuais", :width => 300, :height => 280 do para "Partidas Atuais"+"\n", :font=>30 para yaml stack do button "Fechar" do close end end end end button "Listar Partidas Encerradas", :width=>"90%", :margin=>5 do $cliente.puts "INICIO" $cliente.puts( { "request" => { "operation" => "listar_partidas_encerradas" } }.to_yaml ) $cliente.puts "FIM" loop do string = $cliente.gets break if string && string.include?("INICIO") end yaml = $cliente.gets("\nFIM") yaml = yaml.chomp("FIM") window :title => "Partidas Encerradas", :width => 300, :height => 280 do para "Partidas Encerradas"+"\n", :font=>30 para yaml stack do button "Fechar" do close end end end end button "Informacoes de uma Partida", :width=>"90%", :margin=>5 do window :title => "Partida", :width => 300, :height => 280 do stack :margin=>10, :width=>100 do para "Partida: " @partida=edit_line :width=>200 end stack do button "OK", :width=>"70%", :margin=>5 do $cliente.puts "INICIO" $cliente.puts( { "request" => { "operation" => "info_partida", "match" => @partida.text } }.to_yaml ) $cliente.puts "FIM" loop do string = $cliente.gets break if string && string.include?("INICIO") end yaml = $cliente.gets("\nFIM") yaml = yaml.chomp("FIM") window :title => "Informacoes da partida", :width => 300, :height => 280 do para "Partida"+"\n", :font=>30 para yaml stack do button "Fechar" do close end end end end button "Cancelar", :width=>"70%", :margin=>5 do close end end end end button "Apostas de uma Partida", :width=>"90%", :margin=>5 do window :title => "Apostas", :width => 300, :height => 280 do stack :margin=>10, :width=>100 do para "Nome da Partida: " @partida=edit_line :width=>200 end stack do button "OK", :width=>"70%", :margin=>5 do $cliente.puts "INICIO" $cliente.puts( { "request" => { "operation" => "info_aposta", "match" => @partida.text } }.to_yaml ) $cliente.puts "FIM" loop do string = $cliente.gets break if string && string.include?("INICIO") end yaml = $cliente.gets("\nFIM") yaml = yaml.chomp("FIM") window :title => "Apostas da partida", :width => 300, :height => 280 do para "Apostas"+"\n", :font=>30 para yaml stack do button "Fechar" do close end end end end button "Cancelar", :width=>"70%", :margin=>5 do close end end end end button "Fazer Aposta", :width=>"90%", :margin=>5 do window :title => "Nova Aposta", :width => 300, :height => 300 do stack :margin=>10 do stack :margin=>10, :width=>100 do para "Partida" @partida=edit_line :width=>200 end stack :margin=>10, :width=>100 do para "Placar(_X_)" @placar=edit_line :width=>200 end flow :margin=>10 do button "OK", :width=>"70%" do $cliente.puts "INICIO" $cliente.puts( { "request" => { "operation" => "fazer_aposta", "match" => @partida.text, "score" => @placar.text } }.to_yaml ) $cliente.puts "FIM" alert "Aposta Realizada" close end button "Cancelar", :width=>"70%" do close end end end end end button "Sair", :width=>"90%", :margin=>5 do $cliente.puts "INICIO" $cliente.puts( { "request" => { "operation" => "encerrar_conexao" } }.to_yaml ) $cliente.puts "FIM" w.close end end end ################################################################# ###### AQUI TERMINA A JANELA COM AS POSSIVEIS OPERACOES ######### ################################################################# end end end end end end end
Testes
Criação de um novo usuário
Abaixo são mostradas as telas de criação de um novo usuário. Ao clicarmos na opção de criar um usuário na tela principal, uma nova janela é aberta, onde podemos digitar o nome de usuário e a senha desejados. Após a criação bem sucedida a tela de criação é fechada e somente a janela principal fica aberta.


Login de um usuário cadastrado
Abaixo é mostrada a tela de login de usuário. Ele é bem semelhante à tela de cadastro de novo usuário. Ao clicarmos para fazer o login a tela é fechada e é aberta uma nova tela com as opções disponíveis para o usuário.


Listar partidas em andamento
Ao clicarmos para ver as partidas em andamento uma nova janela é aberta e nela são impressas as partidas como mostrado abaixo. Para sair dessa tela basta clicarmos no botão de fechar.

Listar partidas encerradas
Da mesma forma que para listar as partidas em andamento, temos a tela que lista as partidas encerradas. No caso mostrado abaixo não havia nenhuma partida encerrada no sistema.

Imagens das outras telas
Abaixo são mostradas as outras telas criadas:

Apesar de o restante do projeto estar funcionado normalmente, eu não consegui que essas duas telas funcionassem. Depois de passar bastante tempo tentando consertar o que estava errado eu não consegui. Acredito que o erro esteja no servidor e que ele não está retornando as informações de uma partida e das apostas de uma partida corretamente. Tentei resolver o erro no servidor, mas após exaustivas tentativas de consertar acabei por desistir de fazê-lo, visto que eu já estava em cima do prazo.
O projeto do lab6 está no link ao lado: Ces-22_Lab6
Conclusão
Foi bem interessante completar o laboratório 5 com a aplicação cliente. Apesar de não saber usar o Shoes, foi relativemente simples aprender e utilizar seus comandos básicos. Considerei esse laboratório mais simples que o anterior, apesar da necessidade de entender como o laboratório 5 funcionava para poder fazer este.
Observação: Não pude fazer a apresentação do meu laboratório final porque viajei na sexta-feira(5/12) à noite para Fortaleza. Passei na sala do professor Parente à tarde mas não havia ninguém lá. Quando vi o email dizendo que você, Bernardo, estava no h8 naquele dia vendo a apresentação do pessoal, eu já estava de saída para a rodoviária, por isso, infelizmente, não pude apresentar o trabalho naquele dia. Nesse dia eu estava mais ou menos na metade do laboratório5, já iniciando o servidor.





