Envoyé par : Ivory
Date : 21/02/2008 12:32
Bonjour,
Je suis nouveau sur ce forum et j'ai apprécié les réponses que vous fournissez sur les problèmes en XUL, je vais donc tenter de vous expliquer le mien le plus précisément possible.
Je m'explique : La boîte noire est un serveur de socket xul qui écoute sur un port. L'application tente une communication sur ce port : si elle réussit on passe par la boîte noire qui lui créera une socket destinée à la communication.
Mon problème: J'ai une sous fonction qui crée un flux de sortie sur la socket de communication, réponds à l'application et ferme le flux. J'ai une autre fonction, qui possède une socket spéciale qui est destinée à la communication avec le serveur et qui forward les données reçues au serveur.
Mais voilà! Seule la fonction que j'exécute en premier fonctionne, la deuxième est ignorée par le xul.
Je n'aime pas déranger les gens pour des petits problèmes, mais ca fait deux jours que je suis bloqué et j'aimerais bien avancer! Je vous suis très reconnaisant d'avance pour vos réponses.
Envoyé par : Paul Rouget
Date : 21/02/2008 12:53
Qu'est ce que tu appelles ignoré ? As tu une exception quelconque ?
Envoyé par : Ivory
Date : 21/02/2008 13:31
Non justement pas d'exception! Pourtant les blocs try catch sont bien présents partout.
ignoré --> Tous les console.log et les alert qui sont à l'intérieur de la deuxième fonction dans l'ordre d'exécution ne s'affichent pas. J'ai permuté les deux fonctions pour tester, et c'est toujours le même schéma, la deuxième fonction dans l'ordre d'exécution est ignorée. C'est ce point la qui me désarçonne.
Envoyé par : Ivory
Date : 21/02/2008 13:43
En fait, tout ce qui est à l'intérieur du DataListener n'est pas pris en compte
@@/*********************************/ /* Démarrage de la server Socket */ /*********************************/
startServerSocket = function() { var listener = { onSocketAccepted : function(socket, transport) { //A chaque fois que l'on acceptera une socket, on en crée une nouvelle qui lira les données try { //Ici il faut une gestion de tout ce qui touche au clientId _lastClientId++; clientId = _lastClientId; _clientFrames[clientId] = transport; //A response is sent to tha application, in order to know which port it should use to communicate response = "HTTP/1.1 200 OK\n"+ "Content-type: test/json\n\n" + "{ frameId : " + clientId + ", portNumber : " + transport.port + " }"; if(_clientFrames[clientId].isAlive()){ console.log("Je réponds au client :"+clientId); //Ici on va renvoyer une réponse a l'application qui a le bon Id sendToClient(response,clientId); } var dataListener = { data : "", onStartRequest: function(request, context){ console.log("OnStartRequest");}, onStopRequest: function(request, context, status){ listener.finished(this.data); alert(this.data); }, onDataAvailable: function(request, context, inputStream, offset, count){ this.data += instream.read(count); sendToServer(this.data); } }; //On initialise un inputstream pour lire les données recues stream = transport.openInputStream(0,0,0); instream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); instream.init(stream); var pump = Components.classes["@mozilla.org/network/input-stream-pump;1"].createInstance(Components.interfaces.nsIInputStreamPump); pump.init(stream, -1, -1, 0, 0, false); pump.asyncRead(dataListener,null); } catch(ex2){ dump("::"+ex2); } }, onStopListening : function(socket, status){} }; try { serverSocket = Components.classes["@mozilla.org/network/server-socket;1"] .createInstance(Components.interfaces.nsIServerSocket); serverSocket.init(7055,false,-1); serverSocket.asyncListen(listener); } catch(ex){ dump(ex); } return null; }@@
Envoyé par : Ivory
Date : 21/02/2008 14:10
En fait je pense avoir trouvé la piste qu'il me manquait ; la réponse au transport.isAlive est donnée fausse une fois que j'ai fermé le Outputstream! Si je ne le ferme pas à l'intérieur de la routine, il est toujours "vivant après, mais du coup l'application ne reçoit pas la donnée.... Commme toujours un problème en cache un autre.
Est-il possible que l'appli recoive la donnée même si on ne ferme pas le stream?
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.