use a separate function to handle peer found

Signed-off-by: Leo Chen <leo@harmony.one>
pull/372/head
Leo Chen 6 years ago
parent ac26de397f
commit 5ddab11138
  1. 35
      api/service/discovery/service.go

@ -27,6 +27,7 @@ type Service struct {
DHT *libp2pdht.IpfsDHT DHT *libp2pdht.IpfsDHT
Rendezvous string Rendezvous string
ctx context.Context ctx context.Context
peerChan <-chan peerstore.PeerInfo
} }
// New returns discovery service. // New returns discovery service.
@ -44,6 +45,7 @@ func New(h p2p.Host, r string) *Service {
DHT: dht, DHT: dht,
Rendezvous: r, Rendezvous: r,
ctx: ctx, ctx: ctx,
peerChan: make(<-chan peerstore.PeerInfo),
} }
} }
@ -63,24 +65,10 @@ func (s *Service) StartService() {
log.Debug("Successfully announced!") log.Debug("Successfully announced!")
log.Debug("Searching for other peers...") log.Debug("Searching for other peers...")
peerChan, err := routingDiscovery.FindPeers(s.ctx, s.Rendezvous) s.peerChan, err = routingDiscovery.FindPeers(s.ctx, s.Rendezvous)
if err != nil { if err != nil {
log.Error("FindPeers", "error", err) log.Error("FindPeers", "error", err)
} }
for peer := range peerChan {
// skip myself
if peer.ID == s.Host.GetP2PHost().ID() {
continue
}
log.Debug("Found Peer", "peer", peer.ID, "addr", peer.Addrs)
p := p2p.Peer{PeerID: peer.ID, Addrs: peer.Addrs}
s.Host.AddPeer(&p)
// TODO: stop ping if pinged before
s.pingPeer(p)
}
select {}
} }
// StopService shutdowns discovery service. // StopService shutdowns discovery service.
@ -88,6 +76,21 @@ func (s *Service) StopService() {
log.Info("Shutting down discovery service.") log.Info("Shutting down discovery service.")
} }
func (s *Service) foundPeers() {
select {
case peer := <-s.peerChan:
if peer.ID != s.Host.GetP2PHost().ID() {
log.Debug("Found Peer", "peer", peer.ID, "addr", peer.Addrs)
if len(peer.ID) > 0 {
p := p2p.Peer{PeerID: peer.ID, Addrs: peer.Addrs}
s.Host.AddPeer(&p)
// TODO: stop ping if pinged before
s.pingPeer(p)
}
}
}
}
// Init is to initialize for discoveryService. // Init is to initialize for discoveryService.
func (s *Service) Init() error { func (s *Service) Init() error {
log.Info("Init discovery service") log.Info("Init discovery service")
@ -114,6 +117,8 @@ func (s *Service) Init() error {
} }
wg.Wait() wg.Wait()
go s.foundPeers()
return nil return nil
} }

Loading…
Cancel
Save