Partager via


Recherche synchrone

L’objet Device Finder active les recherches synchrones et asynchrones. Les recherches synchrones sont terminées et ne retournent le contrôle à l’application appelante qu’une fois tous les appareils disponibles trouvés. Pour effectuer une recherche synchrone, utilisez l’une des méthodes de recherche synchrone de l’interface IUPnPDeviceFinder .

Notes

Le retour des recherches synchrones prend au moins neuf secondes. Le délai est dû au fait que le message de recherche UDP initial doit être envoyé plusieurs fois. Cette duplication tient compte du manque de fiabilité du protocole réseau sous-jacent. Les recherches synchrones sont idéales pour les interfaces de ligne de commande. Elles ne sont pas recommandées pour les interfaces utilisateur graphiques.

 

La méthode IUPnPDeviceFinder::FindByType recherche par type d’appareil ou de service. Cette méthode prend un URI de type comme paramètre d’entrée et retourne une collection d’objets Device. Un objet Device représente un appareil individuel.

Les exemples suivants montrent comment effectuer une recherche synchrone d’appareils dans VBScript. Chaque script utilise IUPnPDeviceFinder::FindByType, appelé avec le type URI (ID de service) pour le type d’appareil du lecteur multimédia, urn:schemas-upnp-org:device:mediaplayer.v1.00.00. La méthode retourne une collection d’objets Device qui correspond aux appareils de lecteur multimédia qui ont été trouvés. Pour plus d’informations sur l’extraction d’objets d’appareil individuels à partir d’une collection, consultez Collections d’appareils retournées par des recherches synchrones.

Rechercher des appareils par type dans VBScript

Dim deviceFinder

Set deviceFinder = CreateObject( "UPnP.UPnPDeviceFinder" )

Dim devices

Set devices = deviceFinder.FindByType( "urn:schemas-upnp-org:device:multidisk-dvd", 0 )

Rechercher appareil par type en C++

L’exemple suivant illustre une recherche synchrone pour les appareils de lecteur multimédia à l’aide de C++. La fonction prend un pointeur vers l’interface IUPnPDeviceFinder en tant qu’entrée et retourne le pointeur d’interface IUPnPDevices .

L’exemple alloue d’abord un BSTR pour représenter l’URI de type d’appareil, puis le transmet à la méthode IUPnPDeviceFinder::FindByType . Il transmet également l’adresse d’un pointeur IUPnPDevices local dans la mémoire tampon dans laquelle la méthode stocke ensuite la collection d’appareils trouvés. Si l’appel de fonction réussit, il retourne le pointeur vers cette collection.

#include <windows.h>
#include <upnp.h>
#include <stdio.h>

#pragma comment(lib, "oleaut32.lib")

IUPnPDevices *FindMediaPlayerDevices(IUPnPDeviceFinder *pDeviceFinder)
{
    HRESULT         hr = S_OK;
    IUPnPDevices    * pFoundDevices = NULL;
    BSTR            bstrTypeURI = NULL;

    bstrTypeURI = 
        SysAllocString(L"urn:schemas-upnp-org:device:multidisk-dvd");

    if (bstrTypeURI)
    {
        hr = pDeviceFinder->FindByType(bstrTypeURI, 
                                       0,
                                       &pFoundDevices);

        if (SUCCEEDED(hr))
        {
            wprintf(L"FindMediaPlayerDevices(): "
                    L"Search returned successfully\n");
        }
        else
        {
            fwprintf(stderr, L"FindMediaPlayerDevices(): "
                     L"FindByType search failed - returned "
                     L"HRESULT 0x%x\n",
                     hr);
            pFoundDevices = NULL;
        }
        SysFreeString(bstrTypeURI);
    }
    else
    {
        fwprintf(stderr, L"FindMediaPlayerDevices(): "
                 L"Could not allocate BSTR for type URI\n");
    }

    return pFoundDevices;
}