Add multi-universe receiver support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Ian Gulliver
2026-01-30 15:39:20 -08:00
parent 54a46fbfe1
commit ae0d5ed64c

View File

@@ -25,6 +25,29 @@ func NewUniverseReceiver(iface *net.Interface, universe uint16) (*Receiver, erro
}, nil }, nil
} }
func NewMultiUniverseReceiver(iface *net.Interface, universes []uint16) (*Receiver, error) {
if len(universes) == 0 {
return nil, nil
}
c, err := multicast.ListenMulticastUDPPort("udp4", iface, Port)
if err != nil {
return nil, err
}
for _, u := range universes {
if err := c.JoinGroup(MulticastAddr(u)); err != nil {
c.Close()
return nil, err
}
}
return &Receiver{
conn: c,
done: make(chan struct{}),
}, nil
}
func NewDiscoveryReceiver(iface *net.Interface) (*Receiver, error) { func NewDiscoveryReceiver(iface *net.Interface) (*Receiver, error) {
c, err := multicast.ListenMulticastUDP("udp4", iface, DiscoveryAddr) c, err := multicast.ListenMulticastUDP("udp4", iface, DiscoveryAddr)
if err != nil { if err != nil {