Le projet est une petit jeu de géographie dans lequel on doit reconnaitre la ville proposé.
Ce projet exploite REST API pour assurer une communication client - serveur.
Le serveur java gère les utilisateurs et les quiz.
## Fonctionnement:
### Démmarage
Au lancement du serveur, le serveur récupère les questions dans le fichier `questions.json` localisé dans le dossier resource.
Grâce à la librairie `Gson` et la méthode `DefaultQuiz#init()` le fichier est converti en une liste de quiz qui est par la suite utilisé.
### Processus de jeu
enregistrement nouveau joueur :
Lorsqu'un joueur commence à jouer au jeu, on lui demande son nom d'utilisateur.
Une requète `POST` http est alors réalisée à destination de `ConnexionResource` via le lien `http://localhost:8080/projet_prog_reseau_war_exploded/api/start`. Cette requète contient un fichier json contenant l'username, qui sera parsé par le serveur.
Le serveur créé un nouveau `User` et l'enregistre dans la table de hachage dans la classe `Users`. Cette classe contient tous les utilisateurs jouant actuellement au jeu. Il pourrait y avoir des cas où plusieurs joueurs ont le même pseudo. Pour éviter ce cas là, nous attribuons un `UUID` aléatoire à chaque utilisateur, et c'est cet `UUID` qui est utilisé comme clé de la table de hachage.
Le serveur à donc créé un nouveau `User` et transmet un fichier json au client contenant le premier quiz et l'uuid du joueur. Le client garde en mémoire l'`UUID`.
Le client gère alors l'affichage de la question et des réponses. On envoie au client un `ClientQuiz` pour éviter de transmettre la réponse.
guess:
Le joueur choisira une réponse par la suite et envera une requète `POST` au serveur qui contient son uuid ainsi que la réponse correspondante.
Le serveur répond par la suite au client. Le serveur renvoie au client un nouveau fichier json. Il se produit deux cas :
- la réponse fournie est la bonne. Le fichier json contient l'attribut "answer" mis à true qui dit au client que la répnse était la bonne.
- la réponse fournie est la fausse. Le fichier json contient l'attribut "answer" mis à false qui dit au client que la répnse était la fausse. Le fichier json contient aussi la bonne réponse.
Dans les deux cas, le score est transmis au joueur.
nouvelle question:
Le joueur peut faire une requète au serveur pour obtenir une nouvelle question. Pour cela, le client passe par la requète `POST` en envoyaint un fichier json contenant son uuid.
Le serveur va par la suite envoyer un nouveau `ClientQuiz` au client via un fichier json comme énoncé précédemment.
Le processus de guess et de nouvelle question continue ainsi.
Pour éviter de se faire bloquer quand on fait une requète, on a une classe `CORSFilter` qui empèche le problème de cross origin.