package protocol import ( "github.com/iotaledger/goshimmer/packages/node" "github.com/iotaledger/goshimmer/packages/timeutil" "github.com/iotaledger/goshimmer/plugins/autopeering/instances/chosenneighbors" "github.com/iotaledger/goshimmer/plugins/autopeering/instances/ownpeer" "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/constants" "github.com/iotaledger/goshimmer/plugins/autopeering/protocol/types" "github.com/iotaledger/goshimmer/plugins/autopeering/types/drop" "time" ) func createChosenNeighborDropper(plugin *node.Plugin) func() { return func() { timeutil.Ticker(func() { if len(chosenneighbors.INSTANCE.Peers) > constants.NEIGHBOR_COUNT / 2 { defer chosenneighbors.INSTANCE.Lock()() for len(chosenneighbors.INSTANCE.Peers) > constants.NEIGHBOR_COUNT / 2 { chosenneighbors.FurthestNeighborLock.RLock() furthestNeighbor := chosenneighbors.FURTHEST_NEIGHBOR chosenneighbors.FurthestNeighborLock.RUnlock() if furthestNeighbor != nil { dropMessage := &drop.Drop{Issuer: ownpeer.INSTANCE} dropMessage.Sign() chosenneighbors.INSTANCE.Remove(furthestNeighbor.Identity.StringIdentifier, false) go func() { if _, err := furthestNeighbor.Send(dropMessage.Marshal(), types.PROTOCOL_TYPE_UDP, false); err != nil { plugin.LogDebug("error when sending drop message to" + chosenneighbors.FURTHEST_NEIGHBOR.String()) } }() } } } }, 1 * time.Second) } }