From ae0d5ed64c80d46ced7666539ac7409059ff0449 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Fri, 30 Jan 2026 15:39:20 -0800 Subject: [PATCH] Add multi-universe receiver support Co-Authored-By: Claude Opus 4.5 --- receiver.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/receiver.go b/receiver.go index df43784..9336971 100644 --- a/receiver.go +++ b/receiver.go @@ -25,6 +25,29 @@ func NewUniverseReceiver(iface *net.Interface, universe uint16) (*Receiver, erro }, 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) { c, err := multicast.ListenMulticastUDP("udp4", iface, DiscoveryAddr) if err != nil {