en R E S E A U
tar xvzf reseau.tgz
allez dans le répertoire réseau/
les fichiers sont déjà compilés si vous changez les constantes vous devez
recompiler le fichier CONSTANTS.java :
javac CONSTANTS.java
java JStart
vous devez d'abord lancer le serveur et ensuite attendre les connexions
des différents joueurs
le numéro de port est inscrit dans le fichier CONSTANTS.java
Ceci est l'aperçu de notre interface graphique
Imaginez que vous conduisez votre voiture sur un trajet de 1000 Km - ou 1000 bornes.Vous respectez les limites de vitesse, vous freinez au feu rouge pour redémarrer au feu vert. Si un pneu crève, vous montez la roue de secours. Vous risquez de tomber en panne d'essence. Après un accident, vous ne repartez qu'après avoir fait réparer la voiture.
Toutes ces situations sont représentées au MILLE BORNES par des cartes. Des bornes, et des feux rouges, verts, des crevaisons, des limites de vitesse, et des fins de limite, des accidents, des réparations, et des pannes d'essence...
Nous avons fait une interface graphique implementée en
JAVA, en utilisant le package SWING.
Cette interface se décompose en trois parties:
Voici comment est decoupé le Serveur(côté programmation):
Phase 1:
le serveur est lancé et il attend des connexions, un premier client tente de se connecter en spécifiant le nom de la machine qui a lancé le serveur (le numéro de port étant spécifié directement dans le code)
La Thread de connexion prévient alors le serveur du jeu qui commence la phase
2 ...
Phase 2:
diagramme de séquence pour la connexion
le serveur crée une nouvelle thread dont le but est de communiquer avec le client1
De son côté, le client a entendu que la connexion a été acceptée (grâce au retour d'accept).
Ce qui lance la Phase 3 ...
Phase 3:
Le client après avoir été connecté crée une Thread de Réception de messages venant du serveur
il crée aussi l'interface qui n'est pas affichée de suite (c'est elle qui peut envoyer des messages au serveur)
il attend d'abord un message du serveur indiquant que le client associé (celui qui a lancé le serveur, il n'y a que lui qui peut le faire) ait lancé le jeu
Pendant cette attente l'état des connexions des joueurs est affiché (via l'interface de connexion).
Phase 4:
Tous les clients se connectent, les threads de communication du serveur sont créées, une par client.
Et le jeu commence...
Voici un schéma global de la connexion du serveur avec un client:
Chaque Oval (sauf Client1) représente une Thread.
On voit que si la connexion est acceptée, les threads communication Client, Réception et Attente communication
Vu que le jeu n'est pas en temps réel, et que de plus l'information des cartes
jouées doit être sans erreurs, le protocole utilisé est TCP(Transmission Control
Protocol).
Plan du Site
Le langage java est tres répandu sur le net, donc tout ce qui concerne le réseau (parce qu'il est securisé). De plus java est portable et la communication entre Sockets est très intuitive (voir exemple de client/serveur en Java).
remarque:si le joueur qui a la main se déconnecte, le serveur le détecte sur son flux d'entree et attrappe l'exception ce qui permet d'avertir les autres joueurs afin qu'ils mettent à jour leurs tables, et le serveur envoie un message au joueur suivant pour le débloquer.
quelle sécurité?
Le joueur a quatre possibilités :
Les attaques sont à placer dans le jeu exposé de vos adversaires; les parades se jouent dans le jeu exposé du joueur. Il existe pour chaque catégorie d'attaque une parade correspondante.
Il y a un petit problème à régler avec les coups fourrés(la pioche n'est pas distribuée)
la déconnexion n'est pas prise en compte à tous les coups
Nous aurions aimé faire:
les déconnexions d'un joueur s'effectue ainsi:
dès que le serveur détecte qu'un joueur a été déconnecté soit
par une erreur sur sa socket d'entrée, soit par un message spécifique
du client, le serveur efface ce joueur, décale les joueurs suivants
en changeant leur numero, envoie un message à chaque joueur leur
indiquant d'effacer ce joueur, il envoie un message à chaque joueur
leur indiquant leurs nouveaux numéros. Il faut enfin désigner
le joueur Suivant.
le gagnant étant celui qui a remporté le plus de points.