:: Enseignements :: Licence :: L3 :: 2009-2010 :: Programmation système en C ::
[LOGO]

Mini © Twitter


Conditions de rendu

Le projet est à réaliser en binôme. Il est à rendre le 28 mai 2010 (ou avant).

Le projet devra être rendu sous la forme d'une archive compressée au format zip et devra contenir le répertoire login1_login2. Ce répertoire devra contenir :
  • doc.pdf : le rapport de projet
  • src/ : le répertoire contenant les sources
  • log/ : le répertoire contenant les logs du serveur
  • bin/ : le répertoire contenant les exécutables
  • Makefile : le fichier qui permet de compiler le projet avec la commande make
Le lien suivant pointe sur l'archive qui devrait être rendue par les étudiants Foo et Bar (vous n'êtes pas obligés de faire votre rapport en LaTeX) :

Les exécutables

  • server [-p portnum] [-d]
lance en mode démon un serveur qui écoute sur le port "portnum" (ou 1963 par défaut). Ce serveur, une fois la communication établie, réalise le protocole applicatif décrit ci-dessous. La commande échoue si un serveur tourne déjà sur ce port, en affichant un message d'erreur, et en retournant la valeur 1. L'option "-d" indique que l'on souhaite faire du dynamique (voire plus bas), si l'on n'a pas implanté cette fonctionnalité, la commande échoue en affichant rien et en retournant 2. Sinon elle retourne 0 pour indiquer que le serveur à bien été lancé.

  • killserver
tue le démon lancé précédemment par la commande "server". Ne fait rien si aucun démon ne tourne.

  • client [-p portnum] URI
lance un client qui se connecte au serveur minitwitter sur le port "portnum" (par défaut 1963) sur la machine indiquée par "URI". Le client lit sur l'entré standard les commandes à envoyer au serveur et affiche sur la sortie standard les réponses du serveur. (Attention au mode dynamique).

Le protocole applicatif minitwitter

Une fois la connexion établie, le client doit s'authentifier. L'authentification est simple : le client envoie un login sur une ligne. Le serveur envoie en réponse un id (sous forme d'un entier) de client sur une ligne. (Toutes les commandes sont faites sur une ligne, c'est-à-dire se terminent par '\n'). Ensuite, le serveur répond aux commandes du client :

  • NAM
liste les login et id des personnes connectées (les personnes déconnectées n'apparaissent plus).
  • renvoie pour chaque utilisateur une ligne de la forme : id:login.

  • ADD text
ajoute un twit contenant le texte text limité à 140 caractères.
  • renvoie 0 : l'opération s'est effectué avec succès
  • renvoie 10 : l'opération a échoué (raison inattendue)

  • GET id
récupère tous les twit posté par l'utilisateur identifié par id.
  • renvoie un twit par ligne

  • FOL id
ajoute l'utilisateur identifié par id à la liste des following. Cela signifie qu'il sera possible de récupérer les messages de id via la commande ADD.
  • renvoie 0 : l'opération s'est effectué avec succès
  • renvoie 20 : l'opération a échoué (raison inattendue)
  • renvoie 21 : utilisateur id invalide
  • renvoie 22 : utilisateur id déjà following

  • FQR id
retire l'utilisateur identifié par id de la liste des following.
  • renvoie 0 : l'opération s'est effectué avec succès
  • renvoie 30 : l'opération a échoué (raison inattendue)
  • renvoie 31 : utilisateur id invalide
  • renvoie 32 : utilisateur id pas following

  • CLE
vide la liste des following.
  • renvoie 0 : l'opération s'est effectué avec succès
  • renvoie 40 : l'opération a échoué (raison inattendue)

  • ALL
récupère tous les twit postés par les utilisateurs ayant été ajoutés dans la liste des following.
  • renvoie pour chaque twit une ligne de la forme : id:text.

  • renvoie 1 : commande invalide

Bonus

  • LIS
passe en mode dynamique. Si un des utilisateurs inscrit dans la liste des following poste un twit, celui-ci est reçu directement (sans appel à ALL).
  • renvoie 0 : l'opération s'est effectué avec succès
  • renvoie 50 : l'opération a échoué (raison inattendue)

  • STI
désactive le mode dynamique.
  • renvoie 0 : l'opération s'est effectué avec succès
  • renvoie 60 : l'opération a échoué (raison inattendue)

Super bonus

Adapter le serveur pour qu'un navigateur web puisse faire office de client.