Svarog d4993c1d06 [NOD-1542] Don't try to return more addresses then we have (#1097)
* [NOD-1542] Don't try to return more addresses then we have

* [NOD-1542] Allocate according to updated count
2020-11-17 16:00:16 +02:00

47 lines
1.1 KiB
Go

package addressmanager
import (
"math/rand"
"time"
"github.com/kaspanet/kaspad/app/appmessage"
)
// AddressRandomize implement AddressRandomizer interface
type AddressRandomize struct {
random *rand.Rand
}
// NewAddressRandomize returns a new RandomizeAddress.
func NewAddressRandomize() *AddressRandomize {
return &AddressRandomize{
random: rand.New(rand.NewSource(time.Now().UnixNano())),
}
}
// RandomAddress returns a random address from input list
func (amc *AddressRandomize) RandomAddress(addresses []*appmessage.NetAddress) *appmessage.NetAddress {
if len(addresses) > 0 {
randomIndex := rand.Intn(len(addresses))
return addresses[randomIndex]
}
return nil
}
// RandomAddresses returns count addresses at random from input list
func (amc *AddressRandomize) RandomAddresses(addresses []*appmessage.NetAddress, count int) []*appmessage.NetAddress {
if len(addresses) < count {
count = len(addresses)
}
result := make([]*appmessage.NetAddress, 0, count)
randomIndexes := rand.Perm(len(addresses))
for i := 0; i < count; i++ {
result = append(result, addresses[randomIndexes[i]])
}
return result
}