---
title: roNetworkDiscovery
slug: develop/ronetworkdiscovery
docTags: 
createdAt: 2025-03-11T07:07:18.732Z
---

This object allows for zeroconf discovery of devices on the local network (including other BrightSign players) using mDNS. Other BrightSign players must be running an instance of [roNetworkAdvertisement](docId\:yQWTvcJm15Y4G2jNw5d5y) to be discovered using the *roNetworkDiscovery* object. 

Object Creation: The *roNetworkDiscovery* object is created with no parameters.

```text
CreateObject("roNetworkDiscovery") 
```

## ifNetworkDiscovery

### Search(parameters As roAssociativeArray) As Boolean

Searches for BrightSign players on the local network. A player will only respond to the search if it is currently running an instance of *roNetworkAdvertisement*. Search results will be posted to the attached message port. Search parameters are passed to this method as an associative array containing the following values:

- `type`: The service type. If this entry is omitted, the search will default to "\_http.\_tcp".
- `protocol`: The IP protocol. Acceptable values are "IPv4" and "IPv6". You can also omit this entry if you wish to search for players using either protocol. 

## ifMessagePort

### SetPort(port As roMessagePort)

Posts events to the attached message port. See the Event Types section below for more details.

## ifUserData

### SetUserData(user\_data As Object)

Sets the user data that will be returned when events are raised.

### GetUserData() As Object

Returns the user data that has previously been set via `SetUserData()`. It will return `Invalid` if no data has been set.

## Event Types

The *roNetworkDiscovery* object can post three event object types to the attached message port:

- *roNetworkDiscoveryResolvedEvent*: Raised when a host is fully resolved.
- *roNetworkDiscoveryCompletedEvent*: Raised when the search is complete.
- *roNetworkDiscoveryGeneralEvent*: Raised for events other than the above two. This event rarely occurs.

All three event objects offer the `SetUserData()`, `GetUserData()`, and `GetData()` methods. Use `GetData()` to retrieve an associative array of results. For the *roNetworkDiscoveryResolvedEvent* object, calling `GetData()` will return the following entries:

- `protocol`: The network protocol family that was used for discovery, either "IPv4" or "IPv6".  Note that this is not necessarily the address family for the returned address; it is possible for IPv6 addresses to be advertised over an IPv4 transport, or vice versa.
- `host_name`: The hostname of the player
- `name`: The service name
- `txt`: An associative array containing arbitrary text entries specified during instantiation of the *roNetworkAdvertisement* instance.
- `domain`: The domain of the player
- `type`: The service type
- `address`: The IPv4 or IPv6 address

The following script searches for a player running an *roNetworkAdvertisement* instance and prints the results of the discovery.

```text
rn = CreateObject("roNetworkDiscovery")
mp = CreateObject("roMessagePort")
rn.SetPort(mp)
params = {}
rn.Search(params)
 
complete = false
while not complete
    ev = mp.WaitMessage(10000)
    if ev = invalid then
        stop
    end if

    if type(ev) = "roNetworkDiscoveryCompletedEvent" then
        print "roNetworkDiscoveryCompletedEvent"
    end if

    if type(ev) = "roNetworkDiscoveryGeneralEvent" then
        print "roNetworkDiscoveryGeneralEvent"
    end if

    if type(ev) = "roNetworkDiscoveryResolvedEvent" then
        complete = true
        data = ev.GetData()
        print "DATA:"; data
        print "DONE"
        textdata = data[ "txt" ]
        if textdata <> invalid then
            print "TEXT: "; textdata
        endif
    end if

end while
```

