X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=js%2Fcomet.js;h=5d848d69e614e0063f3d064bec475e20584d051e;hp=f26a3250f63a08182825ab39be5ecc29aee67dae;hb=3a3ceb24e4a4f3bbec9ec72c945b0cf1bb1ef1a6;hpb=7e471788d9356b1cb8659513674df9a883101807 diff --git a/js/comet.js b/js/comet.js index f26a325..5d848d6 100644 --- a/js/comet.js +++ b/js/comet.js @@ -21,29 +21,31 @@ /** * Permet de gérer les événements (push serveur). * Principe de fonctionnement : - * - La page courante créer un objet euphorik.PageEvent en indiquant le nom de la page + * - La page courante créer un objet euphorik.Comet en indiquant le nom de la page et la version du protocole * - La page courante attend un événement en appelant 'waitEvent' et en donnant deux fonctions : * - 'funSend' une fonction qui renvoie les données à envoyer avant l'attente, par exemple {"dernierMess" : 23} * "header" et "page" seront ajoutés aux données - * - 'funsReceive' un ensemble de fonctions à appeler en fonction du "reply" sur serveur + * - 'funsReceive' un ensemble de fonctions à appeler en fonction du "reply" du serveur * - * l'information envoyé est sous la forme : + * l'information envoyée est sous la forme : * { * "header" : {"action" : "wait_event", "version" : }, * "page" : * [..] * } - * l'information reçu est sous la forme : + * l'information reçue est sous la forme : * { * "reply" : * [..] * } - * @page la page courante pour laquelle on écoute des événements (un string) - * @util le helper 'util' + * et sont de type chaine + * + * @page [string] la page courante pour laquelle on écoute des événements (un string) + * @util [int] la version */ -euphorik.PageEvent = function(page, util) { +Comet = function(page, version) { this.page = page; - this.util = util; + this.version = version; // l'objet JSONHttpRequest représentant la connexion d'attente this.attenteCourante = undefined; @@ -55,7 +57,7 @@ euphorik.PageEvent = function(page, util) { /** * Arrête l'attente courante s'il y en a une. */ -euphorik.PageEvent.prototype.stopAttenteCourante = function() { +Comet.prototype.stopAttenteCourante = function() { this.stop = true; if (this.attenteCourante) { @@ -70,17 +72,17 @@ euphorik.PageEvent.prototype.stopAttenteCourante = function() { * les fonctions acceptent un paramètre correspondant au données reçues. * exemple : {"new_message" : function(data){ ... }} */ -euphorik.PageEvent.prototype.waitEvent = function(funSend, funsReceive) { +Comet.prototype.waitEvent = function(funSend, funsReceive) { this.stopAttenteCourante(); this.stop = false; - var thisPageEvent = this; + var thisComet = this; // on doit conserver l'ordre des valeurs de l'objet JSON (le serveur les veut dans l'ordre définit dans le protocole) // TODO : ya pas mieux ? var dataToSend = { - "header" : { "action" : "wait_event", "version" : euphorik.conf.versionProtocole }, + "header" : { "action" : "wait_event", "version" : this.version }, "page" : this.page }; var poulpe = funSend(); @@ -94,18 +96,18 @@ euphorik.PageEvent.prototype.waitEvent = function(funSend, funsReceive) { dataType: "json", // TODO : doit disparaitre timeout: 180000, // timeout de 3min. Gros HACK pas beau. FIXME problème décrit ici : http://groups.google.com/group/jquery-en/browse_thread/thread/8724e64af3333a76 - data: this.util.jsonVersAction(dataToSend), + data: { action : JSON.stringify(dataToSend) success: function(data) { funsReceive[data.reply](data); // rappel de la fonction dans 100 ms - setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funsReceive); }, 100); + setTimeout(function(){ thisComet.waitEvent2(funSend, funsReceive); }, 100); }, error: function(XMLHttpRequest, textStatus, errorThrown) { ;; console.log("Connexion perdue dans PageEvent.prototype.waitEvent()"); - setTimeout(function(){ thisPageEvent.waitEvent2(funSend, funsReceive); }, 1000); + setTimeout(function(){ thisComet.waitEvent2(funSend, funsReceive); }, 1000); } }); }; @@ -113,7 +115,7 @@ euphorik.PageEvent.prototype.waitEvent = function(funSend, funsReceive) { /** * Si un stopAttenteCourante survient un peu n'importe quand il faut imédiatement arreter de boucler. */ -euphorik.PageEvent.prototype.waitEvent2 = function(funSend, funsReceive) { +Comet.prototype.waitEvent2 = function(funSend, funsReceive) { if (this.stop) { return; }