package chosenneighbors import ( "sync" "github.com/iotaledger/goshimmer/packages/events" "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer" ) var FURTHEST_NEIGHBOR *peer.Peer var FURTHEST_NEIGHBOR_DISTANCE = uint64(0) var FurthestNeighborLock sync.RWMutex func configureFurthestNeighbor() { INSTANCE.Events.Add.Attach(events.NewClosure(func(p *peer.Peer) { FurthestNeighborLock.Lock() defer FurthestNeighborLock.Unlock() distance := OWN_DISTANCE(p) if distance > FURTHEST_NEIGHBOR_DISTANCE { FURTHEST_NEIGHBOR = p FURTHEST_NEIGHBOR_DISTANCE = distance } })) INSTANCE.Events.Remove.Attach(events.NewClosure(func(p *peer.Peer) { FurthestNeighborLock.Lock() defer FurthestNeighborLock.Unlock() if p == FURTHEST_NEIGHBOR { FURTHEST_NEIGHBOR_DISTANCE = uint64(0) FURTHEST_NEIGHBOR = nil for _, furthestNeighborCandidate := range INSTANCE.Peers { distance := OWN_DISTANCE(furthestNeighborCandidate) if distance > FURTHEST_NEIGHBOR_DISTANCE { FURTHEST_NEIGHBOR = furthestNeighborCandidate FURTHEST_NEIGHBOR_DISTANCE = distance } } } })) }