OSDN Git Service

config networkID
[bytom/vapor.git] / toolbar / precog / monitor / monitor.go
index 41d6ce8..e11a657 100644 (file)
@@ -1,9 +1,11 @@
 package monitor
 
 import (
-       "encoding/binary"
-       "io/ioutil"
+       // "encoding/binary"
+       // "io/ioutil"
+       "fmt"
        "os"
+       "strings"
        "time"
 
        "github.com/jinzhu/gorm"
@@ -13,11 +15,11 @@ import (
        vaporCfg "github.com/vapor/config"
        "github.com/vapor/p2p"
        // conn "github.com/vapor/p2p/connection"
-       "github.com/vapor/p2p/signlib"
        // "github.com/vapor/consensus"
-       "github.com/vapor/crypto/sha3pool"
+       // "github.com/vapor/crypto/sha3pool"
        "github.com/vapor/p2p/discover/dht"
        "github.com/vapor/p2p/discover/mdns"
+       "github.com/vapor/p2p/signlib"
        "github.com/vapor/toolbar/precog/config"
        "github.com/vapor/toolbar/precog/database/orm"
 )
@@ -29,17 +31,12 @@ type monitor struct {
 }
 
 func NewMonitor(cfg *config.Config, db *gorm.DB) *monitor {
-       dirPath, err := ioutil.TempDir(".", "")
-       if err != nil {
-               log.Fatal(err)
-       }
-
        nodeCfg := &vaporCfg.Config{
                BaseConfig: vaporCfg.DefaultBaseConfig(),
                P2P:        vaporCfg.DefaultP2PConfig(),
                Federation: vaporCfg.DefaultFederationConfig(),
        }
-       nodeCfg.DBPath = dirPath
+       nodeCfg.DBPath = "vapor_precog_data"
 
        return &monitor{
                cfg:     cfg,
@@ -62,6 +59,7 @@ func (m *monitor) Run() {
 
 // create or update: https://github.com/jinzhu/gorm/issues/1307
 func (m *monitor) updateBootstrapNodes() {
+       var seeds []string
        for _, node := range m.cfg.Nodes {
                ormNode := &orm.Node{
                        PublicKey: node.PublicKey.String(),
@@ -69,6 +67,7 @@ func (m *monitor) updateBootstrapNodes() {
                        Host:      node.Host,
                        Port:      node.Port,
                }
+               seeds = append(seeds, fmt.Sprintf("%s:%d", node.Host, node.Port))
 
                if err := m.db.Where(&orm.Node{PublicKey: ormNode.PublicKey}).
                        Assign(&orm.Node{
@@ -80,6 +79,7 @@ func (m *monitor) updateBootstrapNodes() {
                        continue
                }
        }
+       m.nodeCfg.P2P.Seeds = strings.Join(seeds, ",")
 }
 
 // TODO:
@@ -87,6 +87,8 @@ func (m *monitor) updateBootstrapNodes() {
 // /home/gavin/work/go/src/github.com/vapor/
 // p2p/test_util.go
 // p2p/switch_test.go
+// syncManager
+// notificationMgr
 func (m *monitor) discovery() {
        sw, err := m.makeSwitch()
        if err != nil {
@@ -94,40 +96,22 @@ func (m *monitor) discovery() {
        }
 
        sw.Start()
-       defer sw.Stop()
-}
-
-func (m *monitor) calcNetID() uint64 {
-       var data []byte
-       var h [32]byte
-       data = append(data, vaporCfg.GenesisBlock().Hash().Bytes()...)
-       magic := make([]byte, 8)
-       magicNumber := uint64(0x054c5638)
-       binary.BigEndian.PutUint64(magic, magicNumber)
-       data = append(data, magic[:]...)
-       sha3pool.Sum256(h[:], data)
-       return binary.BigEndian.Uint64(h[:8])
 }
 
 func (m *monitor) makeSwitch() (*p2p.Switch, error) {
-       // TODO: whatz that for
-       // testDB := dbm.NewDB("testdb", "leveldb", dirPath)
-
        swPrivKey, err := signlib.NewPrivKey()
        if err != nil {
                return nil, err
        }
 
        l, listenAddr := p2p.GetListener(m.nodeCfg.P2P)
-       netID := m.calcNetID()
-       discv, err := dht.NewDiscover(m.nodeCfg, swPrivKey, l.ExternalAddress().Port, netID)
+       discv, err := dht.NewDiscover(m.nodeCfg, swPrivKey, l.ExternalAddress().Port, m.cfg.NetworkID)
        if err != nil {
                return nil, err
        }
 
-       // lanDiscv := mdns.NewLANDiscover(mdns.NewProtocol(), int(l.ExternalAddress().Port))
-       // return newSwitch(config, discv, lanDiscv, l, *privateKey, listenAddr, netID)
-       return nil, nil
+       lanDiscv := mdns.NewLANDiscover(mdns.NewProtocol(), int(l.ExternalAddress().Port))
+       return p2p.NewSwitch(m.nodeCfg, discv, lanDiscv, l, swPrivKey, listenAddr, m.cfg.NetworkID)
 }
 
 func (m *monitor) monitorRountine() error {