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

Refacto : identification des joueurs #36

Closed
gaut-b opened this issue Apr 16, 2020 · 4 comments
Closed

Refacto : identification des joueurs #36

gaut-b opened this issue Apr 16, 2020 · 4 comments
Labels
enhancement New feature or request

Comments

@gaut-b
Copy link
Collaborator

gaut-b commented Apr 16, 2020

Un coup on n'utilise l'index (que le server ne connaît pas, puisqu'il est passé dans subjectivestate), un coup on utilise l'id pour identifier le joueur c'est un peu le bordel. Il faut qu'on choisisse un des deux (je suis pour l'id) et qu'on s'y tienne

@gaut-b gaut-b added the enhancement New feature or request label Apr 16, 2020
@augnustin
Copy link
Owner

augnustin commented Apr 16, 2020

En fait ça ne marche pas si on a des joueurs virtuels (id: null).

Mais je suis d'acc avec toi qu'il faut unifier. Du coup les possibilités que je vois sont :

  1. donner un ID à tout le monde et avoir une autre méthode pour déterminer si le joueur est virtuel ou non. (ex: id: BOT_${RANDOM_STRING}`` et isVirtual({id} => id.indexOf('BOT') === 0)

  2. faire en sorte que l'id soit une random string pour tout le monde et stocker socketId comme un autre attribut. De toute façon on ne s'en sert plus trop pour raccrocher le joueur, puisqu'on a le fallback sur le nom

  3. mais en fait, à mon avis, la solution la plus clean serait un hybride de tout cela:

Ne plus utiliser le nom comme identifiant unique de l'utilisateur, ni le socketId, mais bien un autre identifiant unique, qui à mon avis correspondrait à un sessionId, de telle sorte que:

  • si on rafraîchit la page ou l'on ouvre un autre onglet, on soit authentifié comme le même utilisateur, même si on change de pseudo entre temps
  • si quelqu'un d'autre prend le même pseudo il soit un autre utilisateur quand même.

Ces posts doivent aider :

Reste un cas à gérer : le joueur change de device (pke ça marche pas sur son tel cf #30 ) il faut trouver un moyen de remplacer le joueur déjà inscrit. Mais ça, ça fera l'objet d'une autre issue je pense. 😄

@augnustin
Copy link
Owner

Finalement j'ai tranché :

On n'utilise pas l'id, ni le name, mais l'index. C'est un identifiant unique des 4 joueurs, si on en redéfinit un autre ça va faire doublon.

Seul inconvénient, la lisibilité car index peut être utilisé dans un autre contexte que celui du player, mais utiliser autre chose est potentiellement source d'autres bugs donc c'est à mon sens le meilleur compromis.

@gaut-b
Copy link
Collaborator Author

gaut-b commented Apr 29, 2020 via email

@augnustin
Copy link
Owner

augnustin commented Apr 29, 2020

Bah c'est l'index du player, donc pour avoir le player côté serveur, il suffit de faire state.players[index], non ? Il y a quelque chose qui te dérange là-dedans ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants