From 9cc253566a47bcf2983cd07d2e566a55ac0cb30a Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Mon, 12 Aug 2019 21:18:06 +0800 Subject: [PATCH] refactor --- p2p/switch.go | 4 ++++ toolbar/precog/monitor/monitor.go | 46 ++++++++++++++++----------------------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/p2p/switch.go b/p2p/switch.go index 5df815a4..0ff29830 100644 --- a/p2p/switch.go +++ b/p2p/switch.go @@ -135,6 +135,10 @@ func NewSwitch(config *cfg.Config, discv discv, lanDiscv lanDiscv, l Listener, p return sw, nil } +func (sw *Switch) GetDiscv() discv { + return sw.discv +} + // OnStart implements BaseService. It starts all the reactors, peers, and listeners. func (sw *Switch) OnStart() error { for _, reactor := range sw.reactors { diff --git a/toolbar/precog/monitor/monitor.go b/toolbar/precog/monitor/monitor.go index 74cd6c40..fc245991 100644 --- a/toolbar/precog/monitor/monitor.go +++ b/toolbar/precog/monitor/monitor.go @@ -36,6 +36,7 @@ type monitor struct { cfg *config.Config db *gorm.DB nodeCfg *vaporCfg.Config + sw *p2p.Switch discvCh chan *dht.Node privKey chainkd.XPrv } @@ -70,6 +71,13 @@ func (m *monitor) Run() { m.upSertNode(&node) } + sw, err := m.makeSwitch() + if err != nil { + log.Fatal(err) + } + + m.sw = sw + go m.discovery() go m.collectDiscv() @@ -108,17 +116,23 @@ func (m *monitor) upSertNode(node *config.Node) error { }).FirstOrCreate(ormNode).Error } -func (m *monitor) discovery() { - l, _ := p2p.GetListener(m.nodeCfg.P2P) +func (m *monitor) makeSwitch() (*p2p.Switch, error) { + l, listenAddr := p2p.GetListener(m.nodeCfg.P2P) discv, err := dht.NewDiscover(m.nodeCfg, m.privKey, l.ExternalAddress().Port, m.cfg.NetworkID) if err != nil { - log.Fatal(err) + return nil, err } + // no need for lanDiscv, but passing &mdns.LANDiscover{} will cause NilPointer + lanDiscv := mdns.NewLANDiscover(mdns.NewProtocol(), int(l.ExternalAddress().Port)) + return p2p.NewSwitch(m.nodeCfg, discv, lanDiscv, l, m.privKey, listenAddr, m.cfg.NetworkID) +} + +func (m *monitor) discovery() { ticker := time.NewTicker(time.Duration(discvFreqSec) * time.Second) for range ticker.C { nodes := make([]*dht.Node, nodesToDiscv) - n := discv.ReadRandomNodes(nodes) + n := m.sw.GetDiscv().ReadRandomNodes(nodes) for i := 0; i < n; i++ { m.discvCh <- nodes[i] } @@ -159,7 +173,7 @@ func (m *monitor) monitorRountine() error { address := p2p.NewNetAddressIPPort(ip[0], nodes[i].Port) addresses = append(addresses, address) } - sw.DialPeers(addresses) + // m.sw.DialPeers(addresses) // TODO: dail nodes, get lantency & best_height // TODO: decide check_height("best best_height" - "confirmations") @@ -175,25 +189,3 @@ func (m *monitor) monitorRountine() error { // p2p/switch_test.go // syncManager // notificationMgr -/* -func (m *monitor) discovery() { - sw, err := m.makeSwitch() - if err != nil { - log.Fatal(err) - } - - sw.Start() -} -*/ - -func (m *monitor) makeSwitch() (*p2p.Switch, error) { - l, listenAddr := p2p.GetListener(m.nodeCfg.P2P) - discv, err := dht.NewDiscover(m.nodeCfg, m.privKey, l.ExternalAddress().Port, m.cfg.NetworkID) - if err != nil { - return nil, err - } - - // no need for lanDiscv, but passing &mdns.LANDiscover{} will cause NilPointer - lanDiscv := mdns.NewLANDiscover(mdns.NewProtocol(), int(l.ExternalAddress().Port)) - return p2p.NewSwitch(m.nodeCfg, discv, lanDiscv, l, m.privKey, listenAddr, m.cfg.NetworkID) -} -- 2.11.0