mirror of
https://github.com/PeernetOfficial/core.git
synced 2026-07-17 02:47:51 +01:00
Kademlia: Initial bucket refresh implementation. This might be improved down the road.
This commit is contained in:
35
Peer ID.go
35
Peer ID.go
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user