package br.pucrs; import com.matheusjardimb.Match; import com.matheusjardimb.PlayerFactory; import com.matheusjardimb.PlayerFactory.Player; import com.matheusjardimb.client.GameClient; import com.matheusjardimb.server.Game; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService(serviceName = "TicTacToeWS") public class TicTacToeWS { /* operação 0 – preRegistro (usada para viabilizar o teste): informa ao servidor o nome de usuário e o respectivo identificador que o servidor deverá utilizar para este usuário; */ @WebMethod(operationName = "preRegistro") public String preRegistro(@WebParam(name = "name") String name, @WebParam(name = "id") Integer id) { System.out.println("preRegistro"); PlayerFactory.preRegister(name, id); return ""; } /* operação 1 – registraJogador (relacionada ao jogo propriamente dito): recebe o nome do usuário e retorna como resposta o identificador (valor inteiro) que identifica este usuário de forma única no sistema (este identificador será utilizado nas chamadas subsequentes); */ @WebMethod(operationName = "registraJogador") public Integer registraJogador(@WebParam(name = "name") String name) { System.out.println("registraJogador"); Player player = PlayerFactory.registerPlayer(name); if (player == null){ return Match.ERROR; } int id = player.getId(); PlayerFactory.assignToMatch(id); return id; } /*operação 2 – temPartida (relacionada ao jogo propriamente dito): recebe o identificador do usuário e retorna um valor inteiro que pode ser -2 (tempo de espera esgotado), -1 (erro), 0 (ainda não há partida), 1 (sim, há partida e o jogador inicia jogando com “X”) ou 2 (sim, há partida e o jogador é o segundo a jogar, usando “O”); */ @WebMethod(operationName = "temPartida") public Integer temPartida(@WebParam(name = "id") Integer id) { System.out.println("temPartida"); return PlayerFactory.assignToMatch(id); } /* operação 3 – ehMinhaVez (relacionada ao jogo propriamente dito): recebe o identificador do usuário e retorna um valor inteiro que pode ser -1 (erro), 0 (não), 1 (sim), 2 (é o vencedor), 3 (é o perdedor) ou 4 (houve empate); */ @WebMethod(operationName = "ehMinhaVez") public Integer ehMinhaVez(@WebParam(name = "id") Integer id) { System.out.println("ehMinhaVez"); return PlayerFactory.isPlayerTurn(id); } /* operação 4 – obtemGrade (relacionada ao jogo propriamente dito): recebe o identificador do usuário e retorna uma cadeia de caracteres (String) vazia (em caso de erro) ou uma cadeia de caracteres com a representação da grade de jogo apresentada de forma linear, sem grade (conteúdo das posições de 0 até 8, sendo que usa-se: “.” para posição vazia, “X” para jogada do jogador 1 e “O” para jogada do jogador 2); */ @WebMethod(operationName = "obtemGrade") public String obtemGrade(@WebParam(name = "id") Integer id) { System.out.println("obtemGrade"); return PlayerFactory.getBoard(id); } /* operação 5 – enviaJogada (relacionada ao jogo propriamente dito): recebe o identificador do usuário e a jogada (valor inteiro de 0 a 8, correspondendo à posição da jogada na grade), retornando um valor inteiro que pode ser 2 (partida encerrada, o que ocorreria caso o jogador demorasse muito para enviar a sua jogada, o que não será testado nesta implementação), 1 (tudo certo), 0 (posição ocupada) ou -1 (erro); */ @WebMethod(operationName = "enviaJogada") public Integer enviaJogada(@WebParam(name = "id") Integer id, @WebParam(name = "jogada") Integer jogada) { System.out.println("enviaJogada"); return PlayerFactory.setPosition(id, jogada); } /* operação 6 – obtemOponente (relacionada ao jogo propriamente dito): recebe o identificador do usuário e retorna uma cadeia de caracteres (String) vazia (em caso de erro) ou uma cadeia de caracteres com o nome do oponente. */ @WebMethod(operationName = "obtemOponente") public String obtemOponente(@WebParam(name = "id") Integer id) { System.out.println("obtemOponente"); return PlayerFactory.getOpponent(id); } }