Contents Next

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é.


Contents Next