package monitor
import (
- "encoding/binary"
- "io/ioutil"
+ // "encoding/binary"
+ // "io/ioutil"
+ "fmt"
"os"
+ "strings"
"time"
"github.com/jinzhu/gorm"
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"
)
}
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,
// 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(),
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{
continue
}
}
+ m.nodeCfg.P2P.Seeds = strings.Join(seeds, ",")
}
// TODO:
// /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 {
}
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))
- sw := &p2p.Switch{
- Config: m.nodeCfg,
- PeerConfig: p2p.DefaultPeerConfig(m.nodeCfg.P2P),
- Reactors: make(map[string]p2p.Reactor),
- ChDescs: make([]*conn.ChannelDescriptor, 0),
- ReactorsByCh: make(map[byte]Reactor),
- Peers: p2p.NewPeerSet(),
- Dialing: cmn.NewCMap(),
- NodePrivKey: swPrivKey,
- Discv: discv,
- LanDiscv: lanDiscv,
- NodeInfo: p2p.NewNodeInfo(m.nodeCfg, swPrivKey.XPub(), listenAddr, netID),
- Security: security.NewSecurity(m.nodeCfg),
- }
- sw.AddListener(l)
- sw.BaseService = *cmn.NewBaseService(nil, "P2P Switch", sw)
- return sw, nil
+ return p2p.NewSwitch(m.nodeCfg, discv, lanDiscv, l, swPrivKey, listenAddr, m.cfg.NetworkID)
}
func (m *monitor) monitorRountine() error {