Récapitulatif

Commandes

Commandes obligatoires :

GET\n
Demande un travail au serveur.
SET plain\n
Donne un travail /plain/ au client
NOPE code-erreur\n
Renvoie un message d'erreur /code-erreur/ à l'autre partie.
RETURN plain hash\n
Renvoie le résultat /hash/ du TTH de /plain/

Les autres commandes doivent donner lieu à une erreur 2.
Les commandes avec un mauvais nombre de paramètre doivent donner lieu à une erreur 2.

Commandes facultatives :

GET\n
Demande un travail au serveur.
PING\n
Demande un signe de vie
PONG\n
Donne un signe de vie

Codes d'erreur :

0: autres
Ne devrait pas arriver, peut servir pour les tests.
Les deux parties coupent la connexion en cas d'erreur 0
1: pas de travail
Quand le client reçoit cette erreur, il attend 1 minute avant de redemander du travail
2: commande invalide
Si une partie reçoit une commande invalide, elle affiche la commande et coupe la connexion.

Flots d'exécution

Client (connexion)

Client -> GET\n
Client <- SET travail\n
Client calcule TTH(travail)
Client -> RETURN travail TTH(travail)

Serveur (connexion)

Serveur <- Attend clients
Pour chaque client
  Serveur <- attend GET
  Serveur trouve un mot dont le calcul du TTH n'a pas été affecté
  Serveur -> SET chaine
  Serveur <- RETURN chaine TTH(chaine)
  Serveur enregistre le résultat dans la BDD

Serveur (stdin)

Pour chaque entrée
  Calcule le TTH
  Vérifie s'il y a une collision dans la table
  Affiche la/les collisions

Serveur (ping)

Si le timeout est atteint, au choix:
  - Invalider la connexion et l'affectation de tâche
  - Envoyen un PING au client pour vérifier s'il est en vie (et attendre un PONG
    pendant 10 secondes), invalider en cas d'absence de réponse

Client (ping)

  En cas de réception du PING
  Renvoyer un PONG

Paramètres

serveur
  -p port (par défaut: 2048)
  -c nb_max_de_clients_connectés (par défaut: pas de max)
  -f dictionnaire.txt
client
  -h hôte (par défaut: 127.0.0.1)
  -p port (par défaut: 2048)