JeuWeb - Crée ton jeu par navigateur
BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés (/showthread.php?tid=202)

Pages : 1 2


BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - djidi - 13-01-2011

Bonjour,

Je viens de me mettre à BeaconPush :

J'ai donc un script utilisé pour envoyer lorsqu'un personnage se déplace : son identifiant, sa direction et ses coordonnées.
Le système jusque la fonctionne correctement.

Cependant, lorsque un nouvel utilisateur se connecte, je me demande comment il peut savoir qu'il y a tel personnage à telle position ?
Le seul moyen que je vois, c'est que lorsque la personne se connecte, une demande soit envoyée à tous les personnages sur la map pour avoir leur position mais cela me parait très lourd.

N'y a t-il pas un moyen plus simple ?


__________________________________
Ensuite, je voudrais savoir s'il est possible d'envoyer des données supplémentaires à la connexion :


Beacon.connect('azerty', ['channel_A', 'channel_B'], {user: 'bidule'});

Dans la doc, il est précisé que connect() peut prendre l'option "user" mais il s'agit d'une string.
Est-il possible d'envoyer plus d'informations qui pourraient ensuite facilement être récupérées :


Beacon.connect('azerty', ['channel_A', 'channel_B'], {
user: {
userID: 1,
userName: 'bidule',
charID: 2234,
charClass: 'Mage'
}
});

GET /1.0.0/[API key]/channels/mychannel



RE: BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - Sephi-Chan - 13-01-2011

Je ne comprends pas trop… Pourquoi tu veux envoyer des données supplémentaires ?
Pourquoi veux-tu renseigner le serveur de push sur la position des joueurs ?


Sephi-Chan


RE: BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - djidi - 13-01-2011

Je suis bien obligé d'envoyer la position afin que les autres utilisateurs connectés voient le personnage se déplacer.

Pour les données supplémentaires de connexion, cela aurait été plus pratique de pouvoir ajouter d'autres informations, cela m'évitais de faire des requêtes supplémentaires pour les obtenir.


RE: BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - NicoMSEvent - 13-01-2011

j'ai aussi directement pensé à ça : le déplacement des personnages via push, afin de faire du (pseudo?) temps réel. C'est très tentant!


RE: BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - Sephi-Chan - 13-01-2011

Tu peux faire ça très simplement : quand un personnage se déplace, tu envoies la requêtes de déplacement en Ajax à ton serveur Web. Ensuite, ton serveur Web fait les traitement qu'il convient, vérifie que l'utilisateur peut effectuer ce déplacement, etc. puis envoie la requête au serveur de Push, qui se charge de la router aux clients connectés.

Les données envoyées seraient par exemple de la forme { character_id: X, move_to_tile: Y }.


Sephi-Chan


RE: BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - niahoo - 13-01-2011

"""une demande soit envoyée à tous les personnages sur la map pour avoir leur position"""

Ben logiquement tu as sur ton serveur la position de tout le monde non ?


RE: BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - djidi - 13-01-2011

C'est déjà le cas, j'ai fait les scripts de déplacement en temps réel et cette partie est fonctionnelle.
Mon problème est sur le fait de récupérer pour un nouvel arrivant les utilisateurs actuellement sur la map.

Si j'ai NicoMSEvent et djidi sur la map, en train de jouer puis que Sephi-Chan se connecte, comment pourra-t-il savoir ou sont les deux autres sur la map ?

J'ai deux solutions en tête et je souhaiterais savoir si elles sont bonnes, si elles ne le sont pas et s'il y a mieux :
- Stocker en BDD dans une table MEMORY les positions de chaque personnage (mais cela impose de la sauvegarde à chaque déplacement...),
- Que Sephi-chan envoie une requête pour demander leur position à chaque personne sur la map (mais cela me parait très lourd).

@niahoo : Normalement non, ou alors je ne sais pas la récupérer car en faisant le push, les données sont envoyées à ceux qui sont connectés.
Lorsqu'un nouvel utilisateur se connecte il n'a pas accès aux données transmises avant. (par exemple sur un chat, tu ne va pas accéder aux messages qui ont étés envoyés avant ta connexion, sauf si je les stockes, d'où l'idée de la table MEMORY)


RE: BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - Sephi-Chan - 13-01-2011

Quand un nouvel utilisateur arrive sur la page, il charge la carte statiquement une première fois. C'est ensuite que la partie dynamique commence.

Donc Sephi-Chan se connecte, la carte sera affichée à partir des données du serveur et il verra donc NicoMSEvent et Djidji. Et tu push sur le canal de la carte pour notifier à ceux déjà présents que Sephi-Chan s'est connecté.


Sephi-Chan


RE: BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - Argorate - 13-01-2011

un truc m'intrigue, si c'est si "simple" de faire du temps réel, pourquoi je n'ai jamais rencontré de jeu qui soit comme ça? ^^
En tout cas, cette technique envéré au tapis l'AJAX asynchrone tel que je l'utilise actuellement!


RE: BeaconPush - Récupération d'infos sur les utilisateurs déjà connectés - djidi - 13-01-2011

(13-01-2011, 01:23 PM)Sephi-Chan a écrit : Donc Sephi-Chan se connecte, la carte sera affichée à partir des données du serveur et il verra donc NicoMSEvent et Djidi.

Oui, mais cela impose donc que les positions des personnages soient stockés quelque part (donc à part en BDD sur une table MEMORY pour la vitesse d'accès je ne vois pas) car avec le push elles ne le sont pas, c'est juste de l'envoi.

(13-01-2011, 01:26 PM)Argorate a écrit : un truc m'intrigue, si c'est si "simple" de faire du temps réel, pourquoi je n'ai jamais rencontré de jeu qui soit comme ça? ^^

La fluidité probablement.
J'y travaille encore pour essayer d'améliorer mon jeu et les traitements effectués. Sous chrome c'est parfait, mais sur les autres je rencontre parfois de légers lags.