mirror of
https://github.com/wlynxg/NetHive.git
synced 2025-10-13 10:43:41 +08:00
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package engine
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/libp2p/go-libp2p/core/peer"
|
|
)
|
|
|
|
func (e *Engine) autoRelayFinder(ctx context.Context) {
|
|
e.log.Debugf("successfully start auto relay finder!")
|
|
peers := e.host.Network().Peers()
|
|
for _, p := range peers {
|
|
addrs := e.host.Peerstore().Addrs(p)
|
|
if len(addrs) == 0 {
|
|
continue
|
|
}
|
|
node := peer.AddrInfo{ID: p, Addrs: addrs}
|
|
select {
|
|
case e.relayChan <- node:
|
|
e.log.Debugf("find relay candidate node %s", node)
|
|
default:
|
|
}
|
|
}
|
|
|
|
ticker := time.NewTicker(5 * time.Minute)
|
|
defer ticker.Stop()
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
return
|
|
case <-ticker.C:
|
|
closestPeers, err := e.dht.GetClosestPeers(ctx, e.host.ID().String())
|
|
if err != nil {
|
|
e.log.Warnf("autoRelay get cloest peers error: %v", err)
|
|
continue
|
|
}
|
|
|
|
for _, p := range closestPeers {
|
|
addrs := e.host.Peerstore().Addrs(p)
|
|
if len(addrs) == 0 {
|
|
continue
|
|
}
|
|
node := peer.AddrInfo{ID: p, Addrs: addrs}
|
|
select {
|
|
case e.relayChan <- node:
|
|
e.log.Debugf("find relay candidate node %s", node)
|
|
default:
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|