Envoyé par : jfr
Date : 28/04/2008 16:02
Bonjour,
xulrunner v1.8.1.3.
débutant mais ayant déjà pas mal lu la doc xul, je cherche à transmettre à mon application xul des commandes diverses. Je me suis donc orienté vers l'interface nsIServerSocket pour pondre le code qui suit (désolé, il est un peu long):
var serverSocket; function start() { var cmdlistener = { finished : function(data) { var args = data.split(" "); switch (args[0]) { case "load": { var browser = document.getElementById("browser"); browser.stop(); browser.loadURI (args[1]); break; } case "exit": { window.close(); break; } default: alert ("weird cmd: " + data); break; } }, onSocketAccepted : function(socket, transport) { try { var outputString = "HTTP/1.1 200 OK\n"; var stream = transport.openOutputStream(0,0,0); stream.write(outputString,outputString.length); var tinstream = transport.openInputStream(0,0,0); var instream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); instream.init(tinstream); var dataListener = { data : "", onStartRequest: function(request, context){}, onStopRequest: function(request, context, status){ cmdlistener.finished(this.data); stream.close(); }, onDataAvailable: function(request, context, inputStream, offset, count){ this.data += instream.read(count); }, }; var pump = Components.classes["@mozilla.org/network/input-stream-pump;1"].createInstance(Components.interfaces.nsIInputStreamPump); pump.init(tinstream, -1, -1, 0, 0, true); pump.asyncRead(dataListener,null); } catch(ex2){ alert (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(cmdlistener); } catch(ex){ alert(ex); } } function stop() { if (serverSocket) serverSocket.close(); } start ();
Mon soucis est qu'au bout de 30 ou 40 urls chargées toutes les 15 sec, xulrunner ne fait plus rien, et ne réagit d'ailleurs plus à rien.
Quelqu'un a-t'il déjà tenté/réussi ce type de serveur ?
Question subsidiaire, est-ce bien une voie raisonnable pour piloter mon application de l'extérieur ?
Jean-françois
Envoyé par : Paul Rouget
Date : 28/04/2008 17:30
Quelle version de xulrunner ? Tu peux aussi piloter ton application via un commandLineHandler.
Envoyé par : jfr
Date : 28/04/2008 17:43
xulrunner v1.8.1.3
Envoyé par : Paul Rouget
Date : 28/04/2008 18:37
Teste avec nightly de XulRunner 1.9
Envoyé par : jfr
Date : 29/04/2008 10:55
Bon, même punition avec une nightly 1.9. Je pense que mon code est foireux mais je ne vois pas trop où :-(
Pour ce qui est d'un commandLineHandler, cela veut-il dire que je peux m'en servir pour communiquer avec un process xulrunner existant ? J'arrive pas trop à me faire une idée à ce sujet (je vais en coder un mais un avis éclairé n'est pas de trop ).
Jean-françois
Envoyé par : miso
Date : 29/04/2008 16:13
Décommentes onDataAvailable pour avoir un serveur ping J'ai été obligé de supprimer beaucoup de code pour pouvoir poster ça sur le forum, il faut donc certainement vérifier la syntaxe, mais sinon tout y est.
function test1() { if (trace == 1) window.dump("test1\n"); function http_server() { var serverSocket; var connection_counter = 0; this.start = function() { if (trace == 1) window.dump("Entering start\n"); var listener = { onSocketAccepted : function(socket, transport) { connection_counter++; try { var outputString = "TEST\r\n"; var stream = transport.openInputStream(0,0,0); var instream = Components.classes["@mozilla.org/scriptableinputstream;1"] .createInstance(Components.interfaces.nsIScriptableInputStream); instream.init(stream); var os = transport.openOutputStream(1,0,0); var charset = "UTF-8"; // Can be any character encoding name that Mozilla supports var outstream = Components.classes["@mozilla.org/intl/converter-output-stream;1"] .createInstance(Components.interfaces.nsIConverterOutputStream); // This assumes that fos is the nsIOutputStream you want to write to outstream.init(os, charset, 0, 0x0000); outstream.writeString(outputString,outputString.length); var dataListener = { data : "", data_length : 0, onStartRequest: function(request, context){}, onStopRequest: function(request, context, status){ instream.close(); outstream.close(); listener.finished(this.data); }, onDataAvailable: function(request, context, inputStream, offset, count){ // var str; // str = 'received count:' + count + "\n"; // outstream.write(str, str.length); this.data = instream.read(count); // str = 'received data:' + this.data + "\n"; // outstream.write(str, str.length); // str = 'received data.length:' + this.data.length + "\n"; // outstream.write(str, str.length); }; 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){ if (trace == 1) window.dump("onSocketAccepted Exception:" + ex2 +"\n"); } }, onStopListening : function(socket, status){ if (trace == 1) window.dump("onStopListening\n"); } }; try { serverSocket = Components.classes["@mozilla.org/network/server-socket;1"] .createInstance(Components.interfaces.nsIServerSocket); // alert(listening_port); serverSocket.init(listening_port,false,-1); serverSocket.asyncListen(listener); } catch(ex){ if (trace == 1) window.dump("onSocketAccepted Exception 2: " + ex + "\n"); dump(ex); } if (trace == 1) window.dump("HTTP Server Started\n"); } this.stop = function() { if (serverSocket) serverSocket.close(); psyc_log("HTTP Server Stopped\n"); } } if (trace == 1) window.dump("HTTP Server\n"); httpd = new http_server(); httpd.start(); }
Envoyé par : jfr
Date : 13/05/2008 11:07
Bon, ben, merci Miso; ton code plus le mien font des merveilles
jfr
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.