Files
NetHive/core/engine/mdns.go
2024-04-26 16:13:40 +08:00

53 lines
1.1 KiB
Go

package engine
import (
"time"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/libp2p/go-libp2p/core/peerstore"
"github.com/libp2p/go-libp2p/p2p/discovery/mdns"
)
const (
MDNSRetryInterval = 5 * time.Minute
)
func (e *Engine) HandlePeerFound(info peer.AddrInfo) {
e.log.Debugf("mDNS get node addr info: %s", info)
e.host.Peerstore().AddAddrs(info.ID, info.Addrs, peerstore.AddressTTL)
}
func (e *Engine) EnableMdns() error {
if e.mdns == nil {
// init mdns serve
e.mdns = mdns.NewMdnsService(e.host, "_p2proxy._udp", e)
}
go e.mdnsLoop()
return nil
}
func (e *Engine) mdnsLoop() {
if err := e.mdns.Start(); err != nil {
e.log.Warnf("fail to run mDNS service for the %dth time: %v", 1, err)
} else {
e.log.Infof("successfully run mDNS service!")
return
}
ticker := time.NewTicker(MDNSRetryInterval)
defer ticker.Stop()
for i := 2; ; i++ {
select {
case <-e.ctx.Done():
case <-ticker.C:
if err := e.mdns.Start(); err != nil {
e.log.Warnf("fail to run mDNS service for the %dth time: %v", 1, err)
} else {
e.log.Infof("successfully run mDNS service!")
return
}
}
}
}