(DAS 5315) Projeto de Serviços Web 2010/1 Erich D. Lunardeli Silvestre <erich@das.ufsc.br>
Roteiro Visão geral Serviços Interfaces Detalhes Avaliação
Serviço “Confiável” de Geração de Números Aleatórios Visão geral Cliente do Jogador 1 SOAP Serviço “Confiável” de Geração de Números Aleatórios Serviço de Bingo Cliente do Jogador 2 SOAP SOAP SOAP Cliente do Jogador N
Serviço Gerador de Números Aleatórios Serviço Bingo Responsabilidades: Criar instâncias de bingo; Listar bingos; Gerar e distribuir cartelas; Verificar ganhadores; Armazenar e fornecer o estado de cada bingo. Serviço Gerador de Números Aleatórios Responsabilidades: Gerar números pseudo-aleatórios em faixas determinadas; NÃO armazenar estado.
Interface do Serviço de Bingo PartidaDeBingo criar(Bingo bingo, int númeroDeJogadores) ; Parâmetros: bingo = bingo a ser realizado pelo serviço númeroDeJogadores = número de jogadores a esperar antes de iniciar os sorteios do bingo Retorno: partida criada, ela já deve possuir um número atribuído PartidaDeBingo obterPartida (int númeroDaPartida) Este método deve ser utilizado para a obtenção do estado da partida Parâmetro: númeroDaPartida = número da partida a obter Retorno: partida de bingo PartidaDeBingo[] listarPartidas(); Retorna a lista de partidas que ainda não foram iniciadas
Interface do Serviço de Bingo PartidaDeBingo entrar (String nome, int númeroDaPartida) Parâmetros: nome = nome pelo qual o jogador será reconhecido númeroDaPartida = numero da partida a entrar Retorno: Partida de bingo, ela deve conter todos os dados de estado preenchidos Obs: é bloqueante, só retorna quando o último jogador entrar ou um timeout acontecer. void sair (String nome, int númeroDaPartida) nome = nome do jogador númeroDaPartida = numero da partida a deixar
Interface do Gerador de Números Aleatórios int[] gerarAleatorios(int menor, int maior, int[]excluídos, int quantidade) Parâmetros: menor = menor número a gerar maior = maior número a gerar excluídos = números que não devem ser “gerados” quantidade = números a gerar Retorno: Uma lista de números pseudo-aleatórios contidos no intervalo [menor, maior] e que não estejam na lista de excluídos. NÃO pode haver números repetidos.
Classes de Dados Classe Bingo Atributos: String nomeDoCriador nome do criador do bingo, ex: Joãozinho. String nomeDoBingo Nome do bingo, ex: Bingo da Igreja X String[] prêmios (opcional Premio[]) Lista dos prêmios oferecidos no bingo Um par de métodos get/set para cada atributo Classe Premio (opcional) String nome = nome do prêmio String urlDaImagemDoPrêmio = url da imagem do prêmio
Classes de Dados Classe PartidaDeBingo Atributos: Int número Número de identificação da partida, deve ser único String estado Estado atual do bingo, valores possíveis: [“Não iniciado”, “Iniciado”, “Finalizado” ] int Rodada Número da rodada atual Cartela[] cartelas As cartelas de todos jogadores que participam da partida String[] ganhadores Lista dos ganhadores de cada rodada em ordem crescente int[] númerosSorteados Lista de números já sorteados na rodada atual String observações Reservado para mensagens. Por exemplo: Falta uma dezena para jogador X ganhar o prêmio Y. Um par de métodos get/set para cada atributo
Classes de Dados Classe Cartela Atributo: int[] dezenas Dezenas da cartela String nomeDoJogador Nome do dono da cartela Um par de métodos get/set para cada atributo Alguns métodos a cargo do desenvolvedor, ex: marcarDezena(int dezena).
Detalhes Uma interface gráfica deve ser implementada e permitir ao usuário: A criação de uma nova partida de bingo Listagem das partidas ainda não iniciadas Entrar em uma partida que esteja listada Quando em um bingo: Listagem dos atributos (nome, premios (se tiver URL mostrar imagem), etc..) Estado atual (atributos da classe partida) Cartela do jogador e as marcações (opcional: cartela dos demais jogadores) A atualização da interface gráfica com o Serviço de Bingo será feita pelo serviço obterPartida()
Detalhes O número de dezenas de cada cartela é livre, assim como a faixa de números sorteados : Sugestão: 20 e [1,50] Toda geração aleatória de números deve ser feita pelo Serviço de Geração de Números Aleatórios Uma rodada é encerrada quando um jogador completa sua cartela Ao fim de cada rodada: Um prêmio é atribuído ao vencedor As marcações das cartelas são zeradas Cada sorteio de dezena deve levar no máximo 5 segundos
Detalhes Implementação: Alguma linguagem que suporte WS: C++, Java, Python Sugestão: Java + Axis + Apache Tomcat O importante é que tanto a interface gráfica, quanto clientes e serviços funcionem
Avaliação Apresentação Enviar código do projeto pelo menos 1 dia antes via e- mail Marcar horário via e-mail erich@das.ufsc.br