---
title: roUPnPController
slug: develop/es/roupnpcontroller
docTags: 
createdAt: 2025-03-26T17:39:55.201Z
---

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](http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.0.pdf) 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.

```none
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.

:::hint{type="info"}
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&#x20;*

## 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&#x20;*&#x6D;antiene 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&#x20;*&#x63;uando se agregan o eliminan dispositivos de la lista. Estos objetos pueden, a su vez, utilizarse para recuperar objetos *roUPnPDevice&#x20;*&#x71;ue 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).

:::hint{type="info"}
Consulte la página roUPnPSearchEvent para obtener más información sobre los mensajes enviados por el UPnP Controller.
:::

