Labs SD >
O ponto de partida será a solução que se espera que o grupo tenha construído na aula anterior para o Jogo do Galo em gRPC.
O objetivo deste novo exercício é estender essa solução de modo a ser devolvido um erro caso um pedido de jogada leve argumentos inválidos, assim como adicionar-lhe alguns testes unitários.
Vamos então começar!
Vamos agora adicionar um retorno de erro ao servidor caso a mensagem do pedido seja com uma jogada fora do tabuleiro. Relembramos que a operação play recebe o nome do jogador, e a coluna e a linha em que o mesmo pretende fazer umas jogada.
import static io.grpc.Status.INVALID_ARGUMENT;
...
...
PlayResult result = ttt.play(row, column, player);
if (result == PlayResult.OUT_OF_BOUNDS){
responseObserver.onError(INVALID_ARGUMENT.withDescription("Input has to be a valid position").asRuntimeException());
}
else{
// Send a single response through the stream.
PlayResponse response = PlayResponse.newBuilder().setPlay(result).build();
responseObserver.onNext(response);
// Notify the client that the operation has been completed.
responseObserver.onCompleted();
}
...
play_res = null;
...
try{
play_res = stub.play(PlayRequest.newBuilder().setRow(row).setColumn(column).setPlayer(player).build()).getPlay();
if (play_res != PlayResult.SUCCESS) {
displayResult(play_res);
}
}
catch (StatusRuntimeException e) {
System.out.println("Caught exception with description: " +
e.getStatus().getDescription());
}
Vamos agora adicionar uma variante bloqueante da operação checkWinner.
Podem conferir a nossa proposta de resolução.
Nota: esta solução resolve o conjunto dos exercícios dos guiões 3 e 4.
Na próxima aula laboratorial (consultar o calendário das aulas laboratoriais), ser-lhe-á entregue uma alínea adicional que estende a solução construída pelo guião acima (por exemplo, criando novos procedimentos remotos que representem novas operações sobre o jogo e fazer o tratamento de possíveis excepções que ocorram devido ao uso erróneo das mesmas). É, pois, esperado que, nessa aula, cada estudante traga este guião inteiramente resolvido.
© Docentes de Sistemas Distribuídos, Dep. Eng.
Informática, Técnico Lisboa