Add ArtPoll backoff when hearing polls from other sources
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
17
discovery.go
17
discovery.go
@@ -32,6 +32,8 @@ type Discovery struct {
|
|||||||
pollTargets []*net.UDPAddr
|
pollTargets []*net.UDPAddr
|
||||||
done chan struct{}
|
done chan struct{}
|
||||||
onChange func(*Node)
|
onChange func(*Node)
|
||||||
|
lastPollHeard time.Time
|
||||||
|
pollMu sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDiscovery(sender *Sender, shortName, longName string, inputUnivs, outputUnivs []Universe, pollTargets []*net.UDPAddr) *Discovery {
|
func NewDiscovery(sender *Sender, shortName, longName string, inputUnivs, outputUnivs []Universe, pollTargets []*net.UDPAddr) *Discovery {
|
||||||
@@ -86,6 +88,14 @@ func (d *Discovery) pollLoop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Discovery) sendPolls() {
|
func (d *Discovery) sendPolls() {
|
||||||
|
d.pollMu.Lock()
|
||||||
|
lastHeard := d.lastPollHeard
|
||||||
|
d.pollMu.Unlock()
|
||||||
|
|
||||||
|
if time.Since(lastHeard) < 15*time.Second {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
for _, target := range d.pollTargets {
|
for _, target := range d.pollTargets {
|
||||||
d.sender.SendPoll(target)
|
d.sender.SendPoll(target)
|
||||||
}
|
}
|
||||||
@@ -145,6 +155,13 @@ func (d *Discovery) HandlePollReply(src *net.UDPAddr, pkt *PollReplyPacket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Discovery) HandlePoll(src *net.UDPAddr) {
|
func (d *Discovery) HandlePoll(src *net.UDPAddr) {
|
||||||
|
localIP := net.IP(d.localIP[:])
|
||||||
|
if !src.IP.Equal(localIP) {
|
||||||
|
d.pollMu.Lock()
|
||||||
|
d.lastPollHeard = time.Now()
|
||||||
|
d.pollMu.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
if d.receiver == nil {
|
if d.receiver == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user