Kademlia: Initial bucket refresh implementation. This might be improved down the road.

This commit is contained in:
Kleissner
2021-04-25 04:22:10 +02:00
parent 611dfa3b1c
commit f13695709f
7 changed files with 77 additions and 15 deletions

View File

@@ -113,6 +113,14 @@ func PeerlistAdd(PublicKey *btcec.PublicKey, connections ...*Connection) (peer *
// add to Kademlia
nodesDHT.AddNode(&dht.Node{ID: peer.NodeID, Info: peer})
// send to all channels non-blocking
for _, monitor := range peerMonitor {
select {
case monitor <- peer:
default:
}
}
return peer, true
}
@@ -201,3 +209,30 @@ func selfPeerRecord(network *Network) (result PeerRecord) {
LastContact: 0,
}
}
var peerMonitor []chan<- *PeerInfo
// registerPeerMonitor registers a channel to receive all new peers
func registerPeerMonitor(channel chan<- *PeerInfo) {
peerlistMutex.Lock()
defer peerlistMutex.Unlock()
peerMonitor = append(peerMonitor, channel)
}
// unregisterPeerMonitor unregisters a channel
func unregisterPeerMonitor(channel chan<- *PeerInfo) {
peerlistMutex.Lock()
defer peerlistMutex.Unlock()
for n, channel2 := range peerMonitor {
if channel == channel2 {
peerMonitorNew := peerMonitor[:n]
if n < len(peerMonitor)-1 {
peerMonitorNew = append(peerMonitorNew, peerMonitor[n+1:]...)
}
peerMonitor = peerMonitorNew
break
}
}
}