Búsqueda sincrónica
El objeto Device Finder permite búsquedas sincrónicas y asincrónicas. Las búsquedas sincrónicas se completan y devuelven el control a la aplicación que realiza la llamada solo después de que se encuentren todos los dispositivos disponibles. Para realizar una búsqueda sincrónica, use uno de los métodos de búsqueda sincrónicos de la interfaz IUPnPDeviceFinder .
Nota
Las búsquedas sincrónicas tardan al menos nueve segundos en devolverse. El retraso se debe a que el mensaje de búsqueda UDP inicial debe enviarse varias veces. Esta duplicación tiene en cuenta la imposibilidad del protocolo de red subyacente. Las búsquedas sincrónicas son las mejores para las interfaces de línea de comandos. No se recomiendan para interfaces gráficas de usuario.
El método IUPnPDeviceFinder::FindByType busca por tipo de dispositivo o servicio. Este método toma un URI de tipo como parámetro de entrada y devuelve una colección de objetos Device. Un objeto Device representa un dispositivo individual.
En los ejemplos siguientes se muestra cómo realizar una búsqueda sincrónica de dispositivos en VBScript. Cada script usa IUPnPDeviceFinder::FindByType, llamado con el URI de tipo (id. de servicio) para el tipo de dispositivo del reproductor multimedia, urn:schemas-upnp-org:device:mediaplayer.v1.00.00. El método devuelve una colección de objetos Device que corresponde a los dispositivos del reproductor multimedia que se encontraron. Para obtener información sobre cómo extraer objetos de dispositivo individuales de una colección, consulte Recopilaciones de dispositivos devueltas por búsquedas sincrónicas.
Buscar dispositivos por tipo en VBScript
Dim deviceFinder
Set deviceFinder = CreateObject( "UPnP.UPnPDeviceFinder" )
Dim devices
Set devices = deviceFinder.FindByType( "urn:schemas-upnp-org:device:multidisk-dvd", 0 )
Buscar dispositivo por tipo en C++
En el ejemplo siguiente se muestra una búsqueda sincrónica de dispositivos de reproductor multimedia con C++. La función toma un puntero a la interfaz IUPnPDeviceFinder como entrada y devuelve el puntero de interfaz IUPnPDevices .
En primer lugar, el ejemplo asigna un BSTR para representar el URI de tipo de dispositivo y, a continuación, lo pasa al método IUPnPDeviceFinder::FindByType . También pasa la dirección de un puntero IUPnPDevices local en el búfer en el que el método almacena la colección de dispositivos encontrados. Si la llamada de función se realiza correctamente, devuelve el puntero a esta colección.
#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;
}