roUPnPController
Este objeto establece y mantiene un UPnP Control Point. Debe existir durante toda la duración de las operaciones de descubrimiento de UPnP. Consulte el documento Arquitectura de dispositivos UPnP para obtener más información sobre los protocolos de descubrimiento de UPnP.
Creación del objeto: El objeto roUPnPController se crea sin ningún parámetro.
CreateObject("roUPnPController")ifUPnPController
SetDebug(debugo como booleano) como vacío
Habilita la depuración detallada en el motor UPnP.
Search(searchTarget As String, mx As Integer) As Boolean
Emite una solicitud Search para un dispositivo UPnP. Los parámetros corresponden a los valores de encabezado ST (Search Target) y MX (Maximum wait time) que se envían con un comando UPnP M-SEARCH. Las respuestas a la solicitud Search generarán mensajes en forma de objetos roUPnPSearchEvent.
El valor más común para el parámetro searchTarget es "upnp:rootdevice". Esto le permite buscar todos los dispositivos raíz, identificar con qué dispositivos desea interactuar y luego obtener las instancias de roUPnPDevice y UPnPService para estos dispositivos y servicios integrados.
RemoveDevice(udn As String) As Boolean
Fuerza la eliminación del dispositivo especificado de la lista de dispositivos del Control Point. La cadena proporcionada debe incluir "uuid:" antepuesto al valor UDN.
ifMessagePort
Especifica el puerto que recibirá los eventos generados por la instancia roUPnPController
ifUserData
SetUserData(user_data As Object)
Establece los datos de usuario que se devolverán cuando se generen eventos.
GetUserData() As Object
Devuelve los datos de usuario que se establecieron previamente mediante SetUserData(). Devolverá Inválido si no se han establecido datos.
Operación del UPnP Controller
El objeto roUPnPController mantiene una lista de todos los dispositivos UPnP detectados actualmente a los que se puede acceder mediante la red local. Para mantener esta lista, el objeto roUPnPController sigue estas prácticas de control-point generalmente aceptadas:
- Si se recibe una notificación multicast ssdp:alive de un dispositivo que no forma parte de la lista, se consulta su información de dispositivo y se agrega a la lista. Sin embargo, el mensaje ssdp:alive no está pensado como el medio principal para el descubrimiento de dispositivos; más bien, este comportamiento está destinado a mantener la lista actualizada y eliminar dispositivos que desaparecen sin una notificación ssdp:byebye .
- Si se recibe una notificación multicast ssdp:byebye de un dispositivo que forma parte de la lista, se eliminará de la lista.
- El UPnP Controller permite que un cliente emita una solicitud Search para dispositivos UPnP. Se espera que todos los dispositivos de la red respondan directamente al dispositivo solicitante. Si se recibe una respuesta de un dispositivo que no forma parte de la lista, se consulta su información de dispositivo y se agrega a la lista.
- Los dispositivos UPnP informan un "time-to-live" para las notificaciones. Para los mensajes UPnP NOTIFY y search-response, esto está contenido en el encabezado "Cache-Control: max-age". Normalmente, este "time-to-live" es de 20 o 30 minutos, aunque algunos dispositivos tienen valores de tiempo mucho más cortos. Cada dispositivo está configurado para expirar después de que se alcance su "time-to-live", momento en el cual se elimina de la lista de dispositivos. El contador se restablece (es decir, el dispositivo se renueva) después de cada recepción de un mensaje ssdp:alive .
BrightScript no permite acceso directo a su DeviceList interna. En su lugar, genera eventos en forma de objetos roUPnPSearchEvent cuando se agregan o eliminan dispositivos de la lista. Estos objetos pueden, a su vez, utilizarse para recuperar objetos roUPnPDevice que contienen toda la información del dispositivo.
El controlador también genera eventos cada vez que recibe un mensaje multicast NOTIFY o una respuesta a un mensaje M-SEARCH (es decir, una respuesta a una solicitud de búsqueda del controlador). Estos eventos devuelven matrices asociativas que contienen encabezados del mensaje multicast NOTIFY o de la respuesta HTTP al mensaje M-SEARCH.
Las matrices asociativas también pueden contener elementos adicionales que no son encabezados. Para una notificación de mensaje multicast SSDP (tipo 0), la matriz asociativa contendrá una clave "ssdpType", cuyo valor designa si se trata de un mensaje NOTIFY o M-SEARCH. En la mayoría de los casos, es mejor ignorar los mensajes M-SEARCH, a menos que esté implementando un dispositivo UPnP (el objeto controlador UPnP permite esto).
Durante una solicitud M-SEARCH, una notificación de "nuevo dispositivo" (tipo 2) solo se enviará cuando se agregue un dispositivo a la lista interna del controlador. Una vez que un dispositivo forma parte de la lista de dispositivos, las solicitudes M-SEARCH posteriores solo devolverán valores de tipo 1 (respuesta de búsqueda) para ese dispositivo. Esta respuesta de tipo 1 devuelve una matriz asociativa con encabezados de mensaje, pero no un objeto roUPnPDevice (que se utiliza para contener un conjunto completo de información del dispositivo).
Consulte la página roUPnPSearchEvent para obtener más información sobre los mensajes enviados por el UPnP Controller.