Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# Communication HTML - Javascript - XPCOM - C++ - Socket - Serveur

Envoyé par : Paul_Xul

Date : 15/06/2006 13:58

Bonjour,

Je souhaite communiquer entre un page web, et un serveur local réalisé en C++, par une socket. Pour l'instant, j'ai une librairie statique de connection par laquelle je peux me connecter au serveru en client "lourd", je souhaite pouvoir implémenter la même interface sur une page HTML locale (qui sera, à terme, intégrée à une appli XUL).

J'ai imaginé de me connecté au serveur en implémentant cette librairie de connection dans une interface XPCOM. Pour l'instant, tout fonctionne plus ou moins, sauf: Quand je me connecte à mon composant XPCOM, les fonctions que j'appelle en javascript, par exemple execTraitement(), returnent un résultat avant que les appels serveurs ne puissent être réalisés. En fait, execTraitement créée les objets de connection au serveur par ma librairie, mais, comme cette librairie est multithreadée, et que la fonction de mon interface execTraitement() rend un résulat instantanément, le destructeur de mon interface est appelé, qui détruit tout mes objets de connection avant que la communication serveur n'ait pu être établie et que le serveur n'ait pu envoyer de réponse.

J'ai vu qu'il y avait plusieurs façon de résoudre ce pb, (en créant des threads, en récupérant des event javascripts générés depuis XPCOM, etc.), mais il ne me semble pas y avoir de solution plus facilement implémentable que les autres.

D'après la qualité des messages sur ce forum, il me semble que vous devez avoir une ou plusieurs solutions.

Comment pensez vous que je puisse réaliser cette communication de la façon la plus simple et robuste ?

# Re: Communication HTML - Javascript - XPCOM - C++ - Socket - Serveur

Envoyé par : laurentj

Date : 15/06/2006 15:13

c'est pas trés clair ton problème. À mon avis, tu as un problème de design dans ton implémentation de ton xpcom.

Ta librarie n'utilise pas un pattern observer, pour que l'appelant soit tenu au courant de l'ouverture de la connexion ? De la progression des échanges ? ou quelque chose comme ça ?

si la fonction execTraitement() renvoi un résultat immédiatement, c'est parce que tu l'as voulu non ? Tu peux nous éclairer sur le processus de connexion et des échanges de ta lib (sans parler d'xpcom) ? Tu peux nous mettre le code de ta fonction execTraitement() si il n'est pas trop long ?

# Re: Communication HTML - Javascript - XPCOM - C++ - Socket - Serveur

Envoyé par : Paul_Xul

Date : 15/06/2006 18:17

Alors:

  • J'ai un serveur qui écoute sur une socket et qui contrôle des process en fonction de messages qu'ils reçoit. En fonction des résultats des traitements, il renvoie, sur la même socket, des messages en réponse ;
  • J'ai une librairie client, qui se connecte, envoie des messages, attend la réponse et l'affiche. Elle n'implémente directement le pattern observer, mais je sais effectivement dans quel état ma connection est.
  • J'ai une UI toute moche qui implémente la librairie, envoie les message et affiche les réponses. C'est celle là que je voudrais faire en HTML+JS.

Ci dessous le code à ce jour: Mon IDL

#include "nsISupports.idl"
[scriptable, uuid(87B538C2-03FE-4d07-894B-55EFC3F2F739)]
interface I_monInterface : nsISupports
{
 short launch();
 short kill();
 short updateStatus();
};

Mon code (extrait)

/* short launch (); */
NS_IMETHODIMP monInterface::Launch()
{
processLib->initConnection();
return NS_OK;
}

Je comprends bien pourquoi monInterface et processLib sont détruits, processLib est défini dans le .h et normalement, si le destructeur n'était pas appelé, le traitement poursuivrait comme je le souhaite.

Je ne vois pas bien comment faire évoluer mon design pour que ma page HTML puisse communiquer dans les 2 sens avec mon serveur.

Qu'en pensez-vous?

# Re: Communication HTML - Javascript - XPCOM - C++ - Socket - Serveur

Envoyé par : laurentj

Date : 16/06/2006 12:09

ce que je ne comprend pas, c'est que tu dis que ta lib est multithreadé, mais que tu ne semble avoir rien fait pour que ta lib puisse communiquer avec l'exterieur pendant le traitement, en gros pour que les threads de ta lib puisse informer le thread principal d'un résultat, d'un status etc...

Je ne comprend pas non plus pourquoi tu dis que ton interface est détruite. D'abord, une interface ça ne se détruit pas. C'est l'objet qui l'implémente qui est instancié et détruit. En admettant que tu ais dit "le destructeur de mon objet est détruit" : où ça ? quand ? à quel moment ? Si il est détruit, c'est parce que tu as du faire une bourde : il faudrait le stocker dans une variable global JS, ou l'instancier en tant que service, ou quelque chose comme ça..

Ça manque franchement d'information et de rigueur ton exemple. (par exemple, tu indiques short lauch(); dans l'idl, mais la signature de ta méthode launch ne correspond pas du tout...)

Normalement, dans ta lib (je ne parle même pas de xpcom), on devrait pouvoir passer un objet, que ton thread devrait appeler pour communiquer avec ton thread principal.

Là il n'y a rien apparement. Donc je ne vois absolument pas du tout comment ta lib pourrait interagir avec l'interface...

# Re: Communication HTML - Javascript - XPCOM - C++ - Socket - Serveur

Envoyé par : Paul_Xul

Date : 16/06/2006 12:56

Merci bcp de ta réponse. En effet, 1, mon explication est loin d'être claire, 2, après analyse plus poussée, il semble que le pb ne vienne pas de là. Je repose ma -vraie- question sur dans une nouvelle conversation.

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.