diff --git a/discovery/registry.go b/discovery/registry.go index a242677..395abcc 100644 --- a/discovery/registry.go +++ b/discovery/registry.go @@ -35,6 +35,10 @@ type Registry struct { // If <= 0, a device will never expire once observed. Expiration time.Duration + // DeviceRegistry, if not nil, is a device.Registry that will be updated when + // new devices are registered. + DeviceRegistry *device.Registry + // Protects the following data members. mu sync.Mutex // Map of active devices. @@ -70,6 +74,16 @@ func (reg *Registry) Devices() []device.D { // it has not been observed before, or refresh its timeout and metadata if it // has. func (reg *Registry) Observe(dh *protocol.DiscoveryHeaders) (d device.D, isNew bool) { + d, isNew = reg.observeImpl(dh) + + if reg.DeviceRegistry != nil { + reg.DeviceRegistry.Add(d) + } + + return +} + +func (reg *Registry) observeImpl(dh *protocol.DiscoveryHeaders) (d device.D, isNew bool) { // Use hardware address as ID. id := dh.HardwareAddr().String() now := time.Now()