Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# Nouvelle interface proxy

Envoyé par : xulien

Date : 08/04/2008 17:11

Bonjour, Utilisant xulrunner 1.9, j'ai du migrer, dans mon application, vers la nouvelle interface de thread pour lancer un process independant. Je souhaiterai migrer vers la nouvelle interface de proxy pour proxyfier les messages envoyés par mon thread. Cependant je ne trouve pas de doc complète sur l'utilisation. Faut-il tjrs passé par les proxies ? (si oui help me please) Cdlt Xulien

# Re: Nouvelle interface proxy

Envoyé par : David Marteau

Date : 08/04/2008 22:14

Oui il faut utiliser les proxy.

L'interface pour les proxy n'a pas changé il me semble, mais les constantes ont changé de nom:

Exemple:

nsCOMPtr<nsInterfaceMachin> machinProxy;
NS_GetProxyForObject(NS_PROXY_TO_MAIN_THREAD,
                         NS_GET_IID(nsInterfaceMachin),
                         machinPasProxy, NS_PROXY_SYNC, getter_AddRefs(machinProxy));

et:

#include "nsCOMPtr.h"
#include "nsIObserverService.h"
#include "nsServiceManagerUtils.h"
#include "nsIProxyObjectManager.h"
//
nsresult
NS_GetProxyForObject(nsIEventTarget *target, 
                    REFNSIID aIID, 
                    nsISupports* aObj, 
                    PRInt32 proxyType, 
                    void** aProxyObject) 
{
   nsresult rv;
   // get the proxy object manager
   //
   nsCOMPtr<nsIProxyObjectManager> proxyObjMgr = 
       do_GetService("@mozilla.org/xpcomproxy;1",&rv);
   if (NS_FAILED(rv))
       return rv;
   
   // and try to get the proxy object
   //
   return proxyObjMgr->GetProxyForObject(target, aIID, aObj,
                                         proxyType, aProxyObject);
}

# Re: Nouvelle interface proxy

Envoyé par : xulien

Date : 09/04/2008 12:42

Merci beaucoup pour votre réponse mais je souhaite l'implémenter en javascript et je ne sais pas comment renseigner les constantes... Merci

# Re: Nouvelle interface proxy

Envoyé par : David Marteau

Date : 09/04/2008 14:54

La transposition en javascript est immédiate.

Les valeurs des constantes pour 'proxyType' sont accessible via l'interface nsIProxyObjectManager :

nsIProxyObjectManager.INVOKE_SYNC  == NS_PROXY_SYNC  (0x0001)
nsIProxyObjectManager.INVOKE_ASYNC == NS_PROXY_ASYNC (0x0002)
nsIProxyObjectManager.FORCE_PROXY_CREATION == NS_PROXY_ALWAYS (0x0004)

Pour 'target' il faut passer le thread dans lequel le proxy s'execute: Il ya deux valeurs spéciales :

NS_PROXY_TO_CURRENT_THREAD 0 
NS_PROXY_TO_MAIN_THREAD 1

Le plus propre est de passer explicitement le thread (exemple tiré du code source de gecko) :

function getProxyOnUIThread(aObject, aInterface) {
   var mainThread = Components.
           classes["@mozilla.org/thread-manager;1"].
           getService().mainThread;
   //
   var proxyMgr = Components.
           classes["@mozilla.org/xpcomproxy;1"].
           getService(Components.interfaces.nsIProxyObjectManager);
   //
   return proxyMgr.getProxyForObject(mainThread,
           aInterface, aObject, 5);
   // 5 == NS_PROXY_ALWAYS | NS_PROXY_SYNC
}

# Re: Nouvelle interface proxy

Envoyé par : xulien

Date : 09/04/2008 15:08

Merci beaucoup !!!

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.