1   Description générale du projet
1.1   Objectif
 L'objectif du projet est de concevoir et de réaliser un mécanisme
 rudimentaire de ventes aux enchères. Un serveur maintient la liste des
 produits en vente et gère les enchères pour ces produits. Un client
 connecté au serveur par telnet ou nc, peut mettre un produit
 en vente et/ou participer aux enchères d'un ou plusieurs produits. Quand
 un certain temps s'est écoulé depuis la dernière enchère pour un produit,
 le serveur diffuse aux clients participant à cette enchère un message
 d'alerte. Si aucune autre enchère n'est faite après le troisième
 message d'alerte, la vente est adjugée au dernier client ayant fait
 une enchère.
1.2   Architecture générale de l'application
 L'application est constituée d'un processus mutithreadé. Un thread
 ``client'' est lancé pour chaque connexion de client, ce thread est
 chargé de satisfaire les requêtes de ce client. Un thread ``vente''
 est lancé chaque fois qu'un client met un produit en vente. Ce thread
 est chargé de gérer la vente, il contrôle en particulier la diffusion
 des messages d'alerte et adjuge la vente.
1.3   Les requêtes client
Un client, ayant obtenu une connexion par telnet <host> <port> peut
émettre les requêtes suivantes au serveur :
- 
 lister_produit :
 -  lister les produits mis en vente,
 
 - vendre <description> <prix> :
 -  mettre en vente d'un produit
 à un prix donné ; les enchères sont alors lancées pour ce produit,
 
 - quitter :
 -  déconnexion,
 
 - participer <n> :
 -  voir les enchères effectuées pour le produit
 numéro <n> (remarque : le vendeur d'un produit participe par
 défaut aux enchères),
 
 - encherir <n> <prix> :
 -  proposer une enchère pour le produit 
 numéro <n>. Si l'enchère est valide, elle est diffusée à tous
 les clients ayant demandé à participer aux enchères sur ce produit.
 
1.4   Le serveur
 Le processus serveur tourne en tâche de fond. Il doit pouvoir traiter
 les demandes de connexion des clients, les requêtes des clients
 connectés et les ventes des produits. Pour cela, il lance un thread
 ``client'' pour chaque connexion sur son port d'écoute, chargé de
 traiter les requêtes du client connecté. Lorsqu'un thread ``client''
 traite une requête vendre, il lance alors un thread ``vente'',
 chargé de gérer la vente du produit et crée un tube de communication
 vers le thread vente créé; les enchères proposées par un client pour un
 produit seront communiquées au thread ``vente'' chargé de la vente de ce
 produit via le tube qui lui est associé.