From 9bc75eaf24c4f77031c067f9e09258f74f744aa7 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 20 Jan 2016 11:29:09 -0500 Subject: [PATCH] move DialSeeds in from tendermint/tendermint/node --- switch.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/switch.go b/switch.go index d118d95e5..72a599ab3 100644 --- a/switch.go +++ b/switch.go @@ -3,6 +3,7 @@ package p2p import ( "errors" "fmt" + "math/rand" "net" "time" @@ -249,6 +250,32 @@ func (sw *Switch) startInitPeer(peer *Peer) { sw.addPeerToReactors(peer) // run AddPeer on each reactor } +// Dial a list of seeds in random order +// Spawns a go routine for each dial +func (sw *Switch) DialSeeds(seeds []string) { + // permute the list, dial them in random order. + perm := rand.Perm(len(seeds)) + for i := 0; i < len(perm); i++ { + go func(i int) { + time.Sleep(time.Duration(rand.Int63n(3000)) * time.Millisecond) + j := perm[i] + addr := NewNetAddressString(seeds[j]) + + sw.dialSeed(addr) + }(i) + } +} + +func (sw *Switch) dialSeed(addr *NetAddress) { + peer, err := sw.DialPeerWithAddress(addr) + if err != nil { + log.Error("Error dialing seed", "error", err) + return + } else { + log.Notice("Connected to seed", "peer", peer) + } +} + func (sw *Switch) DialPeerWithAddress(addr *NetAddress) (*Peer, error) { log.Info("Dialing address", "address", addr) sw.dialing.Set(addr.IP.String(), addr)