JeuWeb - Crée ton jeu par navigateur
Question sur Ajax Push Engine et ses "tuyaux" - 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 : Question sur Ajax Push Engine et ses "tuyaux" (/showthread.php?tid=28)

Pages : 1 2 3 4


Question sur Ajax Push Engine et ses "tuyaux" - Pigne - 09-01-2011

Bonsoir @ tous (ou bonjour, ça dépend à quelle heure vous allez lire ça ^^)

J'aurais une petite question pour les utilisateurs de APE.
En effet, j'essaye de me mettre petit à petit à ce système, car j'ai un jeu PHP type MMORPG sur carte 3D iso très complet. J'allais le passer en prod, quand je suis tombé sur APE lol Big Grin

Donc je me suis dis, pourquoi pas l'intégrer, et faire un déplacement des perso en temps réél sur la map (plutot qu'au tour par tour avec reload ajax (lourd...).

J'ai testé tous les exemples fournies, regardé la doc etc... Bref.

Je bute sur un truc depuis 2 jours (je dois être bête ou pas regarder au bon endroit, merci de m'aiguiller :p ) :

Si j'ai un bouton input type="button" value="truc"dans ma page php.
Comment je peux faire pour envoyer des datas dans le pipe de APE (pour lequel un canal est ouvert, pas de soucis) lors d'un clic sur ce bouton ?
En fait, je comprends à peu près les exemple, mais je ne sais pas intégrer des envois avec des trucs externes (boutons etc...).

Je gratouille avant de toucher à mon jeu, pourriez vous m'aider à gratouiller ? ^^
Gratouillons ensemble :p !!!

Merci de m'avoir lu Smile


RE: Question sur Ajax Push Engine et ses "tuyaux" - Viciousity - 09-01-2011

Je ne connais pas trop APE mais si c'est comme PubNub ou BeaconPush tu doit envoyer une requête AJAX vers la fonction de déplacement et inclure dans celle ci un push vers APE et instaurer une fonction JS qui récupère la réponse de APE et fais bouger le joueur sur la carte des autres joueurs ^^. (jQuery animate par ex :p)


RE: Question sur Ajax Push Engine et ses "tuyaux" - niahoo - 10-01-2011

je crois que le réglage des différents canaux se font sur le serveur, le client se contente de souscrire à ces canaux avec une fonction pour leur envoyer des informations, genre objet JSON, et un callback lors de réception des pushs.

mais je dis peut-être une bêtise.


RE: Question sur Ajax Push Engine et ses "tuyaux" - Viciousity - 10-01-2011

Fin personnellement je te conseille BeaconPush car :
- les canaux sont illimités.
- Les push sont tres nombreux (30000 par jour)
- Les requetes se lancent super facilement mais surtout se receptent facilement.
- Les canaux s'ouvrent via ton html ^^

Tres simple a utiliser et nombreuses fonctions super utiles Smile


RE: Question sur Ajax Push Engine et ses "tuyaux" - srm - 10-01-2011

Oui enfin APE c'est un truc que tu installes sur ton propre serveur, donc :
- les canaux sont illimités
- les pushs sont illimités

:]


RE: Question sur Ajax Push Engine et ses "tuyaux" - Pigne - 10-01-2011

Oui, exact, tout est illimité, l'avantage d'un dédié Wink

Merci pour vos réponses, mais je mouline...

J'ai bien essayé une requête en ajax, mais ça me dit "BAD PASSWORD" en retour.
Je penses donc qu'il faut filer le mot de passe à la requête en js, mais heu... c'est pas du tout secure ça.

Bon je continue à chercher, 3ème jour :good: de taff bloqué Cool


RE: Question sur Ajax Push Engine et ses "tuyaux" - djidi - 10-01-2011

Bon, je suis pas sur à 100%, parce que moi aussi je gratouille sur APE.

Pour envoyer les données tu pourrais faire comme ceci coté client lorsque tu clique sur le bouton :


myPipe.request.send('MA_FONCTION', {var1: value1, var2: value2});

Coté serveur, il faut réceptionner (code à placer dans les fichiers d'APE : /var/APE) :


Ape.registerCmd("MA_FONCTION", false, function(params, infos) {

var pipe = Ape.getPipe(params.pipe);
if (!$defined(pipe)) return ["4400", "WHERESTHEPIPE"];

pipe.sendRaw('MA_DEUXIEME_FONCTION', {
'var1':params.var1,
'var2':params.var2 });

return 1;
});

Enfin, il faut que tout le monde sache quand un message est envoyé (coté client) :


client.onRaw('MA_DEUXIEME_FONCTION', function(raw) {

// Traitement, genre affichage d'un message à tout le monde, déplacement d'un personnage...
// Les données sont raw.data.var1, raw.data.var2
});

En espérant que ca t'apporte un peu d'aide.

PS : Pour BeaconPush il y a des aides assez claires sur comment faire des requêtes etc... ? Car en général je trouve les services de push peu clair dans leurs explications/exemples.


RE: Question sur Ajax Push Engine et ses "tuyaux" - Pigne - 10-01-2011

Merci Djidi pour la réponse.
Effectivement, j'ai essayé d'aller dans ce sens.
Pour une fonction incluse DANS la déclaration de ape, c'est ok.
Mais ce que je voudrais faire c'est selon ce code:

http://pastebin.com/HxabHTXi

Tu vois le bouton en bas ?
"<input type="button" value="xxxx" onclick="client.SendInPipe();" />"

En gros, quand on clique sur ce bouton, que cela envoie certaines données. (qui sont dans un autre fichier mais ça je le donne pas, trop long et n'apporte rien car une seule fonction en rapport, et cela ne fonctionne pas). A noter que le "client." juste avant n'était que pour tester ^^



Sinon, ça marche en appelant une page PHP, selon l'envoi de :
Code PHP :
<?php 
$cmd
= array(
array(
'cmd' => 'inlinepush',
'params' => array(
'password' => $APEPassword,
'raw' => 'postmsg',
'channel' => 'testchannel',
'data' => array( //Note: data can't be a string
'message' => $messages[array_rand($messages)] ,
'jscript' => base64_encode($QueryJs)
//(Oui, j'encode en base 64 un envoi de js ^^ mais c'est à cause de certains caractères qui posent soucis lors de l'envoi.)
)
)
)

);

Sauf qu'appeler une page php plusieurs fois par secondes pour maintenir à jour la position de tous les perso d'une carte ça va pas le faire (même si je divise ma map en plusieurs royaumes...).
J'ai testé ce matin, le load serveur monte à + de 90 avec 4 personnes connectés; en gros, ça DOS à 4 mdr ^^ (bon apache est aussi pas bien réglé, m'enfin ça urge pas ^^).


EDIT: Grossierement: je viens d'essayer d'envoyer le sessid récupéré a la main en ajax:
Citation :[{"cmd":"inlinepush","params":{"raw":"postmsg","sessid":"28bed64294d9b428793a3d73be1c1b29","channel":"testchannel","data":{"message":"gni","jscript":"***UN TRUC EN BASE 64 EFFACE***"}}}]Error sending message, server response is :

[{"time":"1294653040","raw":"ERR","data":{"code":"400","value":"BAD_PASSWORD"}}]



RE: Question sur Ajax Push Engine et ses "tuyaux" - Pigne - 10-01-2011

Re ^^

Bon, je cherche jusqu'à ce soir, et je laisse tomber; 3 jours bloqué ça saoule, quand même Smile

Ce qui me rassure, c'est qu'apparemment, personne n'a de solution, donc je suis pas le seul à galérer :p

Si je trouve d'ici ce soir, je vous le dis, sinon ben ça restera comme ça, marre de chercher et j'ai franchement autre chose à faire niveau code que de rester bloqué là dessus Wink


RE: Question sur Ajax Push Engine et ses "tuyaux" - Viciousity - 10-01-2011

Mais je comprend pas ton raisonnement en fait :S
SI jamais tu utilise un serveur push c'est pour envoyer une données qui est directement redistribuée non ?
La pourquoi raffraichir plusieur fois par seconde ?