mirror of
https://github.com/DeBrosOfficial/network.git
synced 2025-10-06 10:19:07 +00:00
refactor: remove legacy peer discovery and connectivity code
This commit is contained in:
parent
6301ed9182
commit
2daa86bd3c
@ -1,121 +0,0 @@
|
|||||||
package client
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"go.uber.org/zap"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ensureAnchatPeerConnectivity ensures Anchat clients can discover each other through bootstrap
|
|
||||||
func (c *Client) ensureAnchatPeerConnectivity() {
|
|
||||||
ticker := time.NewTicker(2 * time.Second)
|
|
||||||
defer ticker.Stop()
|
|
||||||
|
|
||||||
for i := 0; i < 30; i++ { // Run for ~1 minute
|
|
||||||
<-ticker.C
|
|
||||||
|
|
||||||
if !c.isConnected() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
connectedPeers := c.host.Network().Peers()
|
|
||||||
|
|
||||||
if c.dht != nil {
|
|
||||||
// Try to find peers through DHT routing table
|
|
||||||
routingPeers := c.dht.RoutingTable().ListPeers()
|
|
||||||
|
|
||||||
for _, peerID := range routingPeers {
|
|
||||||
if peerID == c.host.ID() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check already connected
|
|
||||||
alreadyConnected := false
|
|
||||||
for _, p := range connectedPeers {
|
|
||||||
if p == peerID {
|
|
||||||
alreadyConnected = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !alreadyConnected {
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
||||||
peerInfo := c.host.Peerstore().PeerInfo(peerID)
|
|
||||||
|
|
||||||
if len(peerInfo.Addrs) == 0 {
|
|
||||||
if found, err := c.dht.FindPeer(ctx, peerID); err == nil {
|
|
||||||
peerInfo = found
|
|
||||||
c.host.Peerstore().AddAddrs(peerInfo.ID, peerInfo.Addrs, time.Hour*24)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(peerInfo.Addrs) > 0 {
|
|
||||||
if err := c.host.Connect(ctx, peerInfo); err == nil {
|
|
||||||
c.logger.Info("Anchat discovered and connected to peer",
|
|
||||||
zap.String("peer", peerID.String()[:8]+"..."))
|
|
||||||
|
|
||||||
if added, err := c.dht.RoutingTable().TryAddPeer(peerID, true, true); err == nil && added {
|
|
||||||
c.logger.Debug("Added new peer to DHT routing table",
|
|
||||||
zap.String("peer", peerID.String()[:8]+"..."))
|
|
||||||
}
|
|
||||||
|
|
||||||
if c.libp2pPS != nil {
|
|
||||||
time.Sleep(100 * time.Millisecond)
|
|
||||||
_ = c.libp2pPS.ListPeers("")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
c.logger.Debug("Failed to connect to discovered peer",
|
|
||||||
zap.String("peer", peerID.String()[:8]+"..."),
|
|
||||||
zap.Error(err))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(routingPeers) == 0 {
|
|
||||||
for _, id := range connectedPeers {
|
|
||||||
if id != c.host.ID() {
|
|
||||||
if added, err := c.dht.RoutingTable().TryAddPeer(id, true, true); err == nil && added {
|
|
||||||
c.logger.Info("Force-added connected peer to DHT routing table",
|
|
||||||
zap.String("peer", id.String()[:8]+"..."))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
c.dht.RefreshRoutingTable()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reconnect to known peers not currently connected
|
|
||||||
allKnownPeers := c.host.Peerstore().Peers()
|
|
||||||
for _, id := range allKnownPeers {
|
|
||||||
if id == c.host.ID() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
already := false
|
|
||||||
for _, p := range connectedPeers {
|
|
||||||
if p == id { already = true; break }
|
|
||||||
}
|
|
||||||
if !already {
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
|
||||||
pi := c.host.Peerstore().PeerInfo(id)
|
|
||||||
if len(pi.Addrs) > 0 {
|
|
||||||
if err := c.host.Connect(ctx, pi); err == nil {
|
|
||||||
c.logger.Info("Anchat reconnected to known peer",
|
|
||||||
zap.String("peer", id.String()[:8]+"..."))
|
|
||||||
if c.libp2pPS != nil { time.Sleep(100 * time.Millisecond); _ = c.libp2pPS.ListPeers("") }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if i%5 == 0 && len(connectedPeers) > 0 {
|
|
||||||
c.logger.Info("Anchat peer discovery progress",
|
|
||||||
zap.Int("iteration", i+1),
|
|
||||||
zap.Int("connected_peers", len(connectedPeers)),
|
|
||||||
zap.Int("known_peers", len(allKnownPeers)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
package client
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/libp2p/go-libp2p/core/peer"
|
|
||||||
"github.com/libp2p/go-libp2p/p2p/discovery/mdns"
|
|
||||||
"go.uber.org/zap"
|
|
||||||
)
|
|
||||||
|
|
||||||
// startMDNSDiscovery enables mDNS peer discovery for local network
|
|
||||||
func (c *Client) startMDNSDiscovery() {
|
|
||||||
mdnsService := mdns.NewMdnsService(c.host, "anchat-p2p", &discoveryNotifee{ client: c, logger: c.logger })
|
|
||||||
if err := mdnsService.Start(); err != nil {
|
|
||||||
c.logger.Warn("Failed to start mDNS discovery", zap.Error(err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.logger.Info("Started mDNS discovery for Anchat")
|
|
||||||
}
|
|
||||||
|
|
||||||
// discoveryNotifee handles mDNS peer discovery notifications
|
|
||||||
type discoveryNotifee struct {
|
|
||||||
client *Client
|
|
||||||
logger *zap.Logger
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n *discoveryNotifee) HandlePeerFound(pi peer.AddrInfo) {
|
|
||||||
n.logger.Info("mDNS discovered Anchat peer", zap.String("peer", pi.ID.String()[:8]+"..."), zap.Int("addrs", len(pi.Addrs)))
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
||||||
defer cancel()
|
|
||||||
if err := n.client.host.Connect(ctx, pi); err != nil {
|
|
||||||
n.logger.Debug("Failed to connect to mDNS discovered peer", zap.String("peer", pi.ID.String()[:8]+"..."), zap.Error(err))
|
|
||||||
} else {
|
|
||||||
n.logger.Info("Successfully connected to mDNS discovered peer", zap.String("peer", pi.ID.String()[:8]+"..."))
|
|
||||||
if n.client.libp2pPS != nil { _ = n.client.libp2pPS.ListPeers("") }
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user