Recherche asynchrone

L’objet de recherche d’appareils active les recherches synchrones et asynchrones. Les recherches asynchrones retournent immédiatement le contrôle à l’application appelante. Ensuite, l’application est notifiée de chaque appareil individuel à mesure qu’elle est trouvée, à l’aide d’une interface de rappel enregistrée par l’application.

La recherche asynchrone est idéale pour les interfaces utilisateur graphiques, et pour les applications qui effectuent une surveillance continue.

La structure générale d’une recherche asynchrone est la suivante :

  1. Créer un objet de recherche
  2. Démarrer la recherche
  3. Recevez des notifications de rappel et suivez les étapes de traitement appropriées.
  4. Lorsque la recherche n’est plus nécessaire, annulez la recherche et relâchez les objets associés.

Notes

Dans le code de rappel, une application ne peut pas libérer l’objet sur lequel elle reçoit une notification, tel qu’un nouvel appareil, et l’application ne peut pas annuler la recherche.

Exemple C++

Les applications C++ doivent implémenter un objet de rappel à passer à la recherche. Pour obtenir un exemple de code illustrant cette action, consultez recherche asynchrone en C++ .

Exemple VBScript

Le code VBScript doit passer l’adresse de la fonction de rappel.

Sub DeviceFinderCallback (device, UDN, calltype)

  select case calltype
    Case 0
      output = "Found: " & vbCrLf
      output = output & "DisplayName: " & device.FriendlyName & vbCrLf
      output = output & "Type: " & device.Type & vbCrLf
      output = output & "UDN: " & device.UniqueDeviceName & vbCrLf
      MsgBox output

    Case 1
      MsgBox "device removed: " & UDN

    Case 2
      MsgBox "search complete"

    end select
End Sub

Dim devicefinder
Dim findData

Set devicefinder = CreateObject("UPnP.UPnPDeviceFinder")

Sub StartFind()
  findData = devicefinder.CreateAsyncFind("upnp:rootdevice", 0, _
   GetRef("DeviceFinderCallback"))

  devicefinder.StartAsyncFind(findData)
End Sub

Sub StopFind()
  deviceFinder.CancelAsyncFind(findData)
End Sub