Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ajout limite taille liste_ventes et liste_achats envoyé par le serveur #14

Merged
merged 22 commits into from Feb 26, 2017

Conversation

david540
Copy link
Contributor

C'est le code que j'ai, celui avec lequel j'ai les issues que j'ai envoyé (je les avais aussi avant modifications)

@matthieu637
Copy link
Owner

J'ai essayé de corriger les exceptions que tu as trouvé (9d82199), il faut donc que tu adaptes un peu ton code.

@matthieu637
Copy link
Owner

Sinon sur le code proposé, tu peux juste définir la valeur par défaut de nbMaxElemListe à 0 :
nbMaxElemListe=0
dans la déclaration de la fonction client.py.

@david540
Copy link
Contributor Author

Oui ça marche ! Je vais mettre mes modifs dans mon pull request.

@david540
Copy link
Contributor Author

Voilà c'est fait.
Par contre pour avoir une sous liste des listesAchats et listesVentes j'ai fais un cast avec une linkedList mais il y a peut être moins couteux maintenant.

Copy link
Owner

@matthieu637 matthieu637 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quelques détails mineurs à améliorer.

mutex_ordre_read.lock();
String r = String.valueOf(liste_achats.get(a));
String r;
if(nbMaxAchats<=0 || nbMaxAchats>liste_achats.get(a).size())
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tu peux transformer le > strict en >= ici.

if(nbMaxAchats<=0 || nbMaxAchats>liste_achats.get(a).size())
r = String.valueOf(liste_achats.get(a));
else
r=String.valueOf(new LinkedList<Ordre>(liste_achats.get(a)).subList(0, nbMaxAchats));
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En effet l'opération de création de liste à partir du set coûte n opérations, puis à nouveau nbMaxAchats opérations. Tu peux adopter la solution que tu avais proposé pour limiter la taille de l'historique qui coûtera moins cher. Le mieux serait même de regrouper le tout dans une fonction et faire les 3 appels (ventes, achats, historique) si c'est possible (attention à bien garder l'ordre cependant).

private String SubSetVersString(Set set, int taille)

@@ -114,18 +114,21 @@ public void run() {
envoyer(out, begin + MapToStringPython(joueur.getSolde_actions()) + "}");
} else if (userInput.startsWith(OPERATIONS) && peut_jouer) {
envoyer(out, String.valueOf(ListPairToStringPythonKeyOnly(joueur.getOperationsOuvertes())));
} else if (userInput.startsWith(ACHATS) && arguments.length == 2 && StringUtils.isNumeric(arguments[1])&& peut_jouer){
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dans l'optique d'optimiser les messages réseaux, tu pourrais garder l'ancien code (ACHATS+ACTION) et ajouter un autre else if indépendant (ACHATS+ACTION+NOMBRE). Comme ça s'il veut récupérer la liste de tous les achats/ventes : il n’envoie pas le nombre pour rien. Mais bon c'est vraiment du détails.

2017/client.py Outdated
return -4
#on envoie le numero de l'action
self.__envoyer(self.__message["ACHATS"]+str(numAction))
self.__envoyer(self.__message["ACHATS"]+str(numAction)+" "+str(nbMaxElemListe))
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pour faire suite à la remarque précédente, si nbMaxElemListe vaut 0, pas besoin de l'envoyer.

@david540
Copy link
Contributor Author

Voilà j'ai refait quelques modifications, maintenant la complexité de la création de la sous liste est en O(nbMaxAchats) je crois.
J'ai fais un seul grand if(userInput.startsWith(ACHATS)) puis j'ai géré les deux cas arguments.length == 2 et arguments.length == 3 ensuite mais du coup j'ai du ajouter pas mal de "else envoyer(out,-4)" donc le code perd en lisibilité, je sais pas ce qui est le mieux
J'ai aussi ajouter des else envoyer(out,-4) là ou il n'y en avait pas (mais bon c'était dans les cas ou les demandes n'étaient pas faites par client.py donc ça ne posait pas de problèmes)

@matthieu637
Copy link
Owner

C'est bien comme ça, merci.
A terme, le code devrait être séparé dans différentes classes pour chaque requête, mais ce n'est pas très important.

@matthieu637 matthieu637 merged commit 766f349 into matthieu637:master Feb 26, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants