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