Module client :: Class Reseau

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") #On crée la partie
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() #ne rend pas la main tant que le créateur n'a pas lancé la partie

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.

Instance Methods
 
__init__(self, host="193.54.21.49", port=23456)
 
__del__(self)
 
creerPartie(self, nom, modeBanque=1, modeExam=1)
Crée la partie et renvoie l’id à communiquer oralement aux autres joueurs.
 
rejoindrePartie(self, id_partie, nom)
Renvoie :
 
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.
Method Details

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

top(self)

 

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

solde(self)

 

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}

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.

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())

listeDesCoups(self)

 

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] #pour un achat de 10 Facebook à 8.0 euros
['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

fin(self)

 

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.

creerCle(self)

 

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.