Class Reseau
Fait le lien entre votre programme et le serveur.
Cette documentation a pour but de vous aider à utiliser la classe
Reseau (qui fait le lien entre votre programme et le serveur). En POO
(programmation orientée objet), une classe est un ensemble de fonctions
prédéfinies. Dans notre cas, cette classe permet de communiquer avec le
serveur “boursier” écrit en Java afin d’acheter, de vendre ... Pour plus
d’informations:
https://openclassrooms.com/courses/apprenez-a-programmer-en-python/premiere-approche-des-classes
Préliminaires
Avant de pouvoir rejoindre ou créer une partie, il faut tout d’abord
importer la class (après l’avoir téléchargée : clic droit, enregistré le lien sous).
Pour cela, il faut mettre ce fichier dans le même dossier que le
fichier courant puis dans le fichier courant, on commence par:
>>> from client import Reseau
r=Reseau() #On travaillera par la suite avec la variable r
Attention: Le fichier client.py ne doit JAMAIS être modifié
!
Création d’une partie
Une fois que la connexion est effectuée, on doit pouvoir choisir
entre créer une partie ou en rejoindre une partie (à faire vous
même...). Pour créer une partie:
>>> num_partie=r.creerPartie("monNom")
print(num_partie) #On récupère son numéro
On récupère le numéro afin de le transmettre oralement aux autres
joueurs qui eux devront rejoindre la partie.
Attention: Celui qui crée la partie n’a pas besoin de la
rejoindre, il est directement considéré comme un joueur
Rejoindre la partie
Une fois la partie créée par l’un des participants, les autres
doivent pouvoir la rejoindre: Premièrement, on rejoint la partie, en
indiquant son numéro et le pseudo que l’on souhaite, par exemple,
>>> r.rejoindrePartie(4488,'MatthieuDevallé')
Puis on doit se synchroniser avec les autres joueurs:
>>> r.top()
On a donc le code suivant pour rejoindre une partie:
>>> r.rejoindrePartie(numéro_partie,"pseudo")
r.top()
Attention: On ne reprend pas la main tant que le créateur n’a pas
lui même tapé r.top
()
Synchronisation pour le départ
Lorsque tous les utilisateurs ont rejoint la partie, il faut se
synchroniser pour le top départ. Pour cela, ceux qui ont rejoint la
partie utiliseront :
>>> r.top()
Une fois que tous les joueurs ont rejoint la partie, le créateur
entre à son tour r.top() qui lance la partie:
A partir de la, créateur et utilisateurs ont acces aux mêmes
fonctions du jeu.
>>> r.solde()
{'Apple': 100, 'Facebook': 100, 'Google': 100, 'Trydea': 100, 'euros': 1000}
A partir de ce moment, il n’y a plus de différence entre le créateur
et les autres joueurs.
Informations sur le classement final
Dans un premier groupe seront d’abord classés les gens qui terminent
la partie avec une somme d’argent supérieure ou égale à 90% de la somme
d’argent initiale.
Dans un second groupe seront ensuite classés les gens qui terminent
la partie avec une somme d’argent inférieure à 90% de la somme d’argent
initiale.
Dans chacun des groupes, les étudiants seront classés simplement par
nombre d’actions possédées à l’issue de la partie, en ne prenant en
compte que les 2 types d’actions possédées en plus grand nombre. (par
exemple quelqu’un à qui il reste 712 actions Google, 14 actions
Facebook, 1500 actions Google et 1500 actions Trydea aura un score de
1500+1500 =3000 actions. Les 712 actions Google et 14 actions Facebook
ne compterons pas dans le score final, elles seront d’une certaine
manière perdue). Dans le cas d’une égalité de ce score, les étudiants
seront départagés avec l’argent restant. Dans le cas d’une nouvelle
égalité, les étudiants seront classés égalité et auront la même
note.
|
__init__(self,
host="193.54.21.49",
port=23456) |
|
|
|
|
|
creerPartie(self,
nom,
modeBanque=1,
modeExam=1)
Crée la partie et renvoie l’id à communiquer oralement aux autres
joueurs. |
|
|
|
|
|
avantTop(self)
Pour le créateur: renvoie la liste des noms des joueurs présents dans
la partie avant le top |
|
|
|
top(self)
Si vous avez rejoint, attend le top départ du créateur. |
|
|
|
solde(self)
Permet de voir notre porte-feuille d’actions et notre argent
disponible Renvoie un dictionnaire (string:entier). |
|
|
|
operationsEnCours(self)
Retourne une liste d’entiers, qui correspondent aux identifiants des
ordres précédemment transmis et qui ne sont pas encore terminés: on
peut donc les suivre et les annuler. |
|
|
|
ask(self,
action,
prix,
volume)
Passer un ordre d'achat. |
|
|
|
bid(self,
action,
prix,
volume)
Passer un ordre de vente. |
|
|
|
achats(self,
action,
nbMaxElemListe=0)
Liste tous les ordres d’achats avec nbMaxElemListe, le nombre maximum
d'éléments de liste pour tous les joueurs sur une action donnée. |
|
|
|
ventes(self,
action,
nbMaxElemListe=0)
Liste tous les ordres de ventes ouverts de tous les utilisateurs pour
une action donnee. |
|
|
|
historiques(self,
action)
Permet de lister tous les échanges déjà effectués sur une action. |
|
|
|
suivreOperation(self,
id_ordre)
Permet de voir le volume restant pour un ordre transmis précédemment. |
|
|
|
annulerOperation(self,
id_ordre)
Annule un ordre transmis précédemment afin de récupérer les fonds
provisionnés. |
|
|
|
listeDesCoups(self)
Retourne une liste qui contient les opérations effectuées par tous
les joueurs de la partie sous la forme : |
|
|
|
fin(self)
Renvoie un dictionnaire contenant le temps restant (en s) avant la
fin de la partie (string:entier). |
|
|
|
creerCle(self)
Renvoie une clé aléatoire à déposer sur arche. |
|
|
creerPartie(self,
nom,
modeBanque=1,
modeExam=1)
|
|
Crée la partie et renvoie l’id à communiquer oralement aux autres
joueurs.
Exemple:
>>> id=r.creerPartie("MatthieuDevallé")
print(id)
31416 #id de la partie
En cas d'erreur(Exemple: pseudo avec des espaces): Renvoie -4
- Parameters:
nom (string) - le nom du joueur qui crée la partie
modeBanque (int) - 1 pour une apparition aléatoire de la banque, 2 pour forcer la
présence, 3 pour ne pas qu'il y est de banque
modeExam (int) - 1 pour une partie où une seule connexion par utilisateur est
autorisé, 0 sinon
|
rejoindrePartie(self,
id_partie,
nom)
|
|
Renvoie :
-
0 si tout s'est bien passé.
-
-1 si le numéro de partie n'existe pas
-
-2 si le nom de joueur est déjà pris
-
-3 si la partie est déjà lancée (top)
-
-4 si les types ne sont pas respectés
-
-5 si vous tenter de vous connecter plusieurs fois pendant une partie
en modeExamen, ou que votre clé n'est pas valide
- Parameters:
id_partie (entier) - le numéro de la partie qui m'a été communiqué oralement
nom (string) - le nom du joueur qui rejoint la partie
|
Si vous avez rejoint, attend le top départ du créateur.
Si vous avez créé, donne le top départ aux autres.
Renvoie 0 pour ceux qui rejoignent et la liste des noms des joueurs
pour le créateur
|
Permet de voir notre porte-feuille d’actions et notre argent
disponible Renvoie un dictionnaire (string:entier).
Exemple:
>>> r.solde()
{'Apple': 1000, 'Facebook': 1000, 'Google': 1000, 'Trydea': 1000, 'euros': 1000}
|
Retourne une liste d’entiers, qui correspondent aux identifiants des
ordres précédemment transmis et qui ne sont pas encore terminés: on peut
donc les suivre et les annuler.
Exemple:
>>> r.operationsEnCours()
[62098581, 20555477]
|
ask(self,
action,
prix,
volume)
|
|
Passer un ordre d'achat. Renvoie :
-
0 si l'ordre a été exécuté directement et que tout son volume a été
écoulé
-
-4 si les types ne sont pas respectés
-
-5 si volume <= 0
-
-6 si prix <= 0
-
-7 si vous n'avez pas assez d'argent pour acheter cette quantité
(prix*volume)
-
-12 si vous avez appellé plusieurs fois top()
-
sinon renvoie l'identifiant de l'ordre (nombre positif)
- Parameters:
action (string) - le nom de l'action
prix (flottant) - prix unitaire d'achat
volume (entier) - le nombre d'actions que vous voulez acheter
|
bid(self,
action,
prix,
volume)
|
|
Passer un ordre de vente. Renvoie :
-
0 si l'ordre a été exécuté directement et que tout son volume a été
écoulé
-
-4 si les types ne sont pas respectés
-
-8 si volume <= 0
-
-9 si prix <= 0
-
-10 si vous n'avez pas assez d'action de type action dans votre
portefeuille
-
-12 si vous avez appellé plusieurs fois top()
-
sinon renvoie l'identifiant de l'ordre (nombre positif)
- Parameters:
action (string) - le nom de l'action
prix (flottant) - prix unitaire de vente
volume (entier) - le nombre d'actions que vous voulez vendre
|
achats(self,
action,
nbMaxElemListe=0)
|
|
Liste tous les ordres d’achats avec nbMaxElemListe, le nombre maximum
d'éléments de liste pour tous les joueurs sur une action donnée. Pour pas
de limite d'éléments de liste, mettre nbMaxElemListe=0 Retourne:
-
-4 si l’action n’existe pas
-
une liste de tuples triée par ordre de prix avantageux sous la forme:
(nom_acheteur, prix, volume)
Exemple:
>>> r.achats("Trydea")
[('Matthieu', 23,15), ('Ryan',20,10), ('Paul', 17,23)]
r.achats("Trydea", 1)
[('Matthieu', 23,15)]
- Parameters:
action (string) - le nom de l'action pour laquelle vous voulez voir les offres
d'achats
nbMaxElemListe (entier) - argument facultatif
|
ventes(self,
action,
nbMaxElemListe=0)
|
|
Liste tous les ordres de ventes ouverts de tous les utilisateurs pour
une action donnee. Pour pas de limite d'éléments de liste, mettre
nbMaxElemListe=0 Renvoie une liste de tuple (nom_acheteur, prix, volume)
triee par le prix le plus avantageux. Si l'action n'existe pas renvoie
-4;
Retourne:
-
-4 si l’action n’existe pas
-
une liste de tuples triée par ordre de prix avantageux sous la forme:
(nom_acheteur, prix, volume)
Exemple:
>>> r.ventes('Facebook')
[('Matthieu', 5.0, 5), ('banque', 25.0, 40000)]
r.ventes('Facebook', 1)
[('Matthieu', 5.0, 5)]
- Parameters:
action (string) - nom de l'action
nbMaxElemListe (entier) - argument facultatif
|
historiques(self,
action)
|
|
Permet de lister tous les échanges déjà effectués sur une action.
Retourne une liste de tuples triée par ordre chronologique. Sous la
forme: (nom_vendeur, nom_acheteur, prix, volume)
Exemple:
>>> r.historiques("Trydea")
[('Matthieu','Mukhlis',10,10), ('Térence', 'Ryan', 15,20), ('Matthieu', 'Ryan', 20,3)]
- Parameters:
action (string) - le nom de l'action
|
suivreOperation(self,
id_ordre)
|
|
Permet de voir le volume restant pour un ordre transmis
précédemment.
Retourne:
-
0 si l’ordre n’existe plus ou est terminé
-
-4 si les types ne sont pas respectés
-
sinon le volume restant en achat/vente.
- Parameters:
id_ordre (entier) - idenfiant unique de l'ordre a suivre
|
annulerOperation(self,
id_ordre)
|
|
Annule un ordre transmis précédemment afin de récupérer les fonds
provisionnés.
Retourne:
-
-11 si l’ordre n’existe plus ou est terminé
-
-4 si les types ne sont pas respectés
-
le volume d’action restant si c’est un ordre de vente
-
les euros dépensés si c’est ordre d’achat
Exemple:
>>> r.annulerOperation(31416)
- Parameters:
id_ordre (entier) - : id de l’odre (récupéré à partir de la fonction
operationsEnCours())
|
Retourne une liste qui contient les opérations effectuées par tous les
joueurs de la partie sous la forme :
>>> ['Achat', 'David', 'Facebook', 8.0, 10]
['Vente', 'David', 'Facebook', 10.0, 4] #pour une vente de 4 Facebook à 10.0 euros
['AnnulationAchat', 'David', 'Trydea', 4.0, 10] #pour une annulation d'achat de 10 Trydea à 4.0 euros
['AnnulationVente', 'David', 'Trydea', 4.0, 10] #pour une annulation de vente de 10 Trydea à 4.0 euros
|
Renvoie un dictionnaire contenant le temps restant (en s) avant la fin
de la partie (string:entier). Si la partie est terminée, affiche le
classement (string:liste).
Exemple:
>>> r.fin()
{'temps': 10} #Il reste 10 secondes avant la fin de la partie.
ou
>>> r.fin()
{'classement': ['Matthieu', 'Mukhlis','banque'], 'temps': 0} #Le classement de fin de partie.
|
Renvoie une clé aléatoire à déposer sur arche. Ne pas la divulger aux
autres : elle sert d'identification. Lors des parties avec modeExamen=1,
vous utiliserez cette clé à la place de votre nom.
|