# CICWiki/Atividade dos Jockeys
## O que é?

A Atividade dos Jockeys foi criada ao longo de anos e documentada junto a outras práticas (P2P Thanos e Net.Aura) tecnológicas por um estudo para alunos da disciplina de Redes de Computadores. Aborda o assunto de Sockets e comunicação servidor-cliente, e recomenda que seja dada após uma aula introduzindo esses tópicos. A atividade, como descrito no estudo, passou por varias iterações, mas terminou com as regras a seguir:
Consiste em os alunos, em sala de aula ou laboratório de informática, por meio de manipulação de códigos Java de uma aplicação cliente, conseguirem se conectar a um servidor e registrar sua partição em uma corrida de cavalos. O aluno se conecta, nomeia um cavalo e a corrida acontece.
A documentação original da aplicação, com o código e executável da atividade, não foi disponibilizada, mas o estudo caracteriza vários níveis de complexidade para a atividade, podendo ser recriada conforme a disponibilidade do educador.

## Como usar?

Como dito, não há disponibilidade ao programa/jogo educacional criado. No entanto, há valor em descrever seu funcionamento, uma vez que a atividade pode ser recriada de varias maneiras, com vários aprofundamentos.
A aplicação foi criada em Java e foi dividido em duas partes. Uma parte responsável por gerir a conexão socket do servidor e outra para reagir aos gatilhos do usuário com a interface gráfica do programa. Ambas serão descritas a seguir de acordo com outro estudo do mesmo grupo, onde detalham as alterações da atividade de sua versão anterior para a mais recente, a mesma detalhada no estudo originalmente trazido.
O cerne do jogo permanece o mesmo, onde um cliente (alunos) deve conectar a um servidor para participar da atividade. O modo e velocidade que os cavalos andam são decididos aleatoriamente e o foco da atividade é garantir que o aluno se conectou corretamente. Nas versões antigas da aplicação, para testar diferentes tipos de conexão eram usados códigos distintos para cada um, algo que mudou na versão trazida aqui, que unificou todas para a seleção no menu principal.

### Gerenciamento de conexão

Ao abrir o programa, pede-se que escolha a "dificuldade" da atividade, que define quão complexo é o protocolo para se inscrever na corrida de cavalos. Essas diferentes dificuldades definem entre o uso de TCP e UDP, além de estabelecer a complexidade do sistema de checagem de mensagens usado.
A primeira dificuldade (TCP Básica) os alunos devem fazer um cliente TCP que envia ao servidor apenas o nome do jóquei. O servidor, que estará esperando apenas uma string, irá usa-la como o nome do jóquei daquele cliente, independente dos caracteres usados. A segunda dificuldade (TCP Média) é similar, mas o servidor espera um numero e a string do método anterior. O numero serve como um método de checagem e o servidor não considera a mensagem se o numero vier fora de um intervalo estabelecido (na atividade, zero e dez).
No terceiro método (TCP Avançada), o servidor inicia a comunicação com o cliente enviando-o um numero. Esse numero deve ser usado em uma operação matemática e o resultado mandado de volta com a string de nome do jóquei. Isso, como o numero no método anterior, é usado como um método de checagem, uma vez que o servidor esperará um resultado específico na mensagem e não aceitará mensagens com o numero errado ou sem ele. Vale apontar que a operação feita deve ser informada ao aluno previamente.
Antes do ultimo método, há uma variação do anterior (ainda com o numero e a operação que deve ser corretamente respondida), mas com protocolo usado UDP em vez de TCP. A consequência disso vem da maior probabilidade de perda ou erro de envio das mensagens. A solução é que, nessa dificuldade, é dado um numero identificador a todos os usuários e espera-se que toda mensagem seja iniciada com o identificador. Isso introduz a possibilidade de erro ou sabotagem por parte de outros clientes.
A ultima dificuldade (TCP hell), em vez de usar uma string para transmitir as informações necessárias, usa a transmissão de um objeto (possível graças ao paralelismo da linguagem Java), e o conhecimento das variáveis e funções desse objeto devem ser preenchidas corretamente e conhecidas pelos dois lados da comunicação.

### Interação com o usuário

Como dito, ao abrir o programa aparecem 5 botões para a seleção de uma das dificuldades acima e um campo para a escolha da porta do servidor que será usada, uma vez que se viu a necessidade de a aplicação poder ter várias instâncias ocorrendo simultaneamente. Ao selecionar a dificuldade e a porta, deve-se comunicar os dados relevantes do Jóquei e o cliente então é levado para a tela principal do jogo. Nesta, a esquerda, há uma lista com todos os clientes que tentaram acesso e, no resto da tela, um desenho de uma pista de corrida de cavalos. Ao inicio da corrida, é criado um cavalo para aqueles que conseguiram acessar passando no método de checagem da dificuldade escolhida.
Então os cavalos seguem a corrida, andando até chegarem na parte direita da janela. A corrida termina quando todos os cavalos finalizarem, quando aparece na tela uma janela com o nome dos três primeiros colocados coloridos de bronze, prata e ouro de acordo com suas colocações. Nessa janela há também um botão para que o usuário volte ao menu principal e possa realizar a atividade novamente, provavelmente em uma dificuldade maior.

## Vantagens e Desvantagens

A óbvia desvantagem é ter que recriar a atividade, já que, diferente das outras duas atividades elaboradas no estudo mencionado, a documentação da Atividade dos Jockeys não foi compartilhada. Está, como dito anteriormente, mais bem detalhada em outro estudo, mas há mais foco em suas novas adições que em uma descrição completa da aplicação. Além disso, alunos comentaram sobre a necessidade de conhecimento prévio de Java, algo que desnivelava a turma.
Como vantagem, o jogo em si é um estimulo para o aluno querer aprender, dando a ele um senso de ação (comum em métodos que envolvem gamificação). A interação ativa com os protocolos de comunicação produzem maior retenção dos conceitos trabalhados, e a competitividade gerada pela corrida foi bem vista pelos alunos do caso de uso do estudo original trazido.

## Categorias
### Disciplinas

* Redes de Computadores

### Palavras-Chave

* Gamificação
* Software