Condividi tramite


Ricerca sincrona

L'oggetto Device Finder consente sia ricerche sincrone che asincrone. Le ricerche sincrone vengono completate e restituiscono il controllo all'applicazione chiamante solo dopo che tutti i dispositivi disponibili sono stati trovati. Per eseguire una ricerca sincrona, usare uno dei metodi di ricerca sincroni dell'interfaccia IUPnPDeviceFinder .

Nota

La restituzione delle ricerche sincrone richiede almeno nove secondi. Il ritardo è causato perché il messaggio di ricerca UDP iniziale deve essere inviato più volte. Questa duplicazione rappresenta l'impossibilità del protocollo di rete sottostante. Le ricerche sincrone sono ideali per le interfacce della riga di comando. Non sono consigliati per le interfacce utente grafiche.

 

Il metodo IUPnPDeviceFinder::FindByType esegue ricerche in base al tipo di dispositivo o di servizio. Questo metodo accetta un URI di tipo come parametro di input e restituisce una raccolta di oggetti Device. Un oggetto Device rappresenta un singolo dispositivo.

Gli esempi seguenti illustrano come eseguire una ricerca sincrona per i dispositivi in VBScript. Ogni script usa IUPnPDeviceFinder::FindByType, chiamato con l'URI di tipo (ID servizio) per il tipo di dispositivo lettore multimediale, urn:schemas-upnp-org:device:mediaplayer.v1.00.00. Il metodo restituisce una raccolta di oggetti Device che corrispondono ai dispositivi del lettore multimediale trovati. Per informazioni sull'estrazione di singoli oggetti dispositivo da una raccolta, vedere Raccolte dispositivi restituite dalle ricerche sincrone.

Cercare dispositivi per tipo in VBScript

Dim deviceFinder

Set deviceFinder = CreateObject( "UPnP.UPnPDeviceFinder" )

Dim devices

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

Cercare Device by Type (Dispositivo per tipo) in C++

L'esempio seguente illustra una ricerca sincrona per i dispositivi lettore multimediale con C++. La funzione accetta un puntatore all'interfaccia IUPnPDeviceFinder come input e restituisce il puntatore all'interfaccia IUPnPDevices .

L'esempio alloca innanzitutto un BSTR per rappresentare l'URI del tipo di dispositivo e quindi lo passa al metodo IUPnPDeviceFinder::FindByType . Passa anche l'indirizzo di un puntatore IUPnPDevices locale nel buffer in cui il metodo archivia quindi la raccolta di dispositivi trovati. Se la chiamata di funzione ha esito positivo, restituisce il puntatore a questa raccolta.

#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;
}