Aller au contenu

Application de discussion

Dans ce mini-projet, vous aurez à créer une application de discussion qui pourrait éventuellement ressembler à Discord. Ce projet sera évolutif et se poursuivra plus tard dans la session.

Le serveur est responsable de toutes les communications et le gardien de la vérité. C'est lui qui sait qui parle avec qui, dans quel canal, à quelle heure, etc. Il est également responsable de transiter l'information vers les différents clients.

Le client sera quant à lui responsable de gérer l'interface utilisateur, de faciliter le transport de l'information et d'encoder/décoder les messages reçus. Il sert de lien entre l'usager et le serveur.

Partie 1 - Coder l'application serveur

La première partie consiste à programmer une application serveur simple. Cette application permettra à un client de se connecter, de recevoir l'information et simplement d'envoyer un ECHO avec le message de l'utilisateur. Par exemple :

Client: Salut!
Serveur: ECHO Salut!
Client: Ça va?
Serveur: ECHO Ça va?

Aucune fonctionnalité merveilleuse, seulement répéter le message.

Pour tester, utiliser netcat comme client. Il nous permet de tester notre serveur immédiatement sans avoir besoin de programmer un client.

Partie 2 - Coder l'application client

Une fois que le serveur est fonctionnel et répond à tous les messages, il sera temps de programmer une application client. Cette application sera responsable d'afficher tous les messages reçus du serveur de manière ergonomique.

Assurez-vous que le client peut bel et bien communiquer avec le serveur avant de poursuivre.

Partie 3 - Journal des messages

Le serveur possède une connaissance complète de tous les messages reçus et envoyés. Votre client devrait également avoir accès à cette information. Vous devez donc implanter les fonctionnalités suivantes :

  • Implanter un journal des messages. Tous les messages reçus seront enregistrés sur le disque. Pensez à un format portable et reconnu (ex. JSON).
  • Lorsque le client se connecte, afficher le nombre total de messages reçus.
  • Lorsque le client envoie la commande LOG, le serveur doit lui envoyer l'historique complet des messages.

Partie 4 - Changer le protocole de communication

Présentement, il n'y a pas réellement de protocole de communication établi. Le seul protocole est de vérifier si le message est LOG et le reste est considéré comme du texte. Cependant, si de nouvelles fonctionnalités devaient s'instaurer, il serait difficile pour le serveur (et pour le client) de déterminer avec précision ce qui se passe.

Vous allez donc changer la façon dont les échanges sont effectués. Au lieu de tout envoyer en texte standard, tous les messages seront échangés en JSON. Cette méthode permettra également d'établir un standard facile à suivre entre votre client et votre serveur.

Voici un exemple de message :

{
    "type": "message",
    "contenu": "Bonjour tout le monde!\nComment allez-vous?"
}

et un exemple d'une commande envoyée au serveur :

{
    "type": "commande",
    "contenu": "LOG"
}

Il sera ainsi plus facile d'ajouter des fonctionnalités à votre application sans briser le processus de communication entre le client et le serveur.