p2p: fix service func register

This commit is contained in:
zelig 2017-05-18 13:56:12 -07:00
parent dc58516e26
commit 31d9c08d3b
3 changed files with 17 additions and 22 deletions

View file

@ -35,9 +35,8 @@ import (
// SimAdapter is a NodeAdapter which creates in-memory nodes and connects them // SimAdapter is a NodeAdapter which creates in-memory nodes and connects them
// using an in-memory p2p.MsgReadWriter pipe // using an in-memory p2p.MsgReadWriter pipe
type SimAdapter struct { type SimAdapter struct {
mtx sync.RWMutex mtx sync.RWMutex
nodes map[discover.NodeID]*SimNode nodes map[discover.NodeID]*SimNode
services map[string]ServiceFunc
} }
// NewSimAdapter creates a SimAdapter which is capable of running in-memory // NewSimAdapter creates a SimAdapter which is capable of running in-memory
@ -45,8 +44,7 @@ type SimAdapter struct {
// node is passed to the NewNode function in the NodeConfig) // node is passed to the NewNode function in the NodeConfig)
func NewSimAdapter(services map[string]ServiceFunc) *SimAdapter { func NewSimAdapter(services map[string]ServiceFunc) *SimAdapter {
return &SimAdapter{ return &SimAdapter{
nodes: make(map[discover.NodeID]*SimNode), nodes: make(map[discover.NodeID]*SimNode),
services: services,
} }
} }
@ -88,12 +86,6 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) {
//} //}
//service := serviceFunc(id) //service := serviceFunc(id)
for _, service := range s.services[config.Service](id, nil) {
for _, proto := range service.Protocols() {
nodeprotos = append(nodeprotos, proto)
}
}
_, err := node.New(&node.Config{ _, err := node.New(&node.Config{
P2P: p2p.Config{ P2P: p2p.Config{
PrivateKey: config.PrivateKey, PrivateKey: config.PrivateKey,
@ -103,15 +95,20 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) {
Dialer: s, Dialer: s,
EnableMsgEvents: true, EnableMsgEvents: true,
}, },
NoUSB: true,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, service := range serviceFuncs[config.Service](id, nil) {
for _, proto := range service.Protocols() {
nodeprotos = append(nodeprotos, proto)
}
}
simnode := &SimNode{ simnode := &SimNode{
Id: id, Id: id,
serviceFunc: s.services[config.Service], serviceFunc: serviceFuncs[config.Service],
adapter: s, adapter: s,
config: config, config: config,
running: []node.Service{}, running: []node.Service{},
@ -284,7 +281,7 @@ func (self *SimNode) Stop() error {
return nil return nil
} }
// Service returns the underlying running node.Service matching the supplied servuce type // Service returns the underlying running node.Service matching the supplied service type
func (self *SimNode) Service(servicetype interface{}) node.Service { func (self *SimNode) Service(servicetype interface{}) node.Service {
self.lock.Lock() self.lock.Lock()
defer self.lock.Unlock() defer self.lock.Unlock()

View file

@ -20,6 +20,7 @@ import (
"crypto/ecdsa" "crypto/ecdsa"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"fmt"
"net" "net"
"os" "os"
@ -215,11 +216,9 @@ var serviceFuncs = make(Services)
// start devp2p nodes // start devp2p nodes
func RegisterServices(services Services) { func RegisterServices(services Services) {
for name, f := range services { for name, f := range services {
// TODO: FIXME: protocol tester if called more than once, throws an error so for now if _, exists := serviceFuncs[name]; exists {
// just overwrite panic(fmt.Sprintf("node service already exists: %q", name))
// if _, exists := serviceFuncs[name]; exists { }
// panic(fmt.Sprintf("node service already exists: %q", name))
// }
serviceFuncs[name] = f serviceFuncs[name] = f
} }

View file

@ -19,8 +19,8 @@ type ProtocolTester struct {
} }
func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester { func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester {
//func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester { //func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester {
services := adapters.Services { services := adapters.Services{
"test": func(id *adapters.NodeId, _ []byte) []node.Service { "test": func(id *adapters.NodeId, _ []byte) []node.Service {
return []node.Service{&testNode{run}} return []node.Service{&testNode{run}}
}, },
@ -28,7 +28,6 @@ func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(*p2p.P
return []node.Service{newMockNode()} return []node.Service{newMockNode()}
}, },
} }
adapters.RegisterServices(services)
adapter := adapters.NewSimAdapter(services) adapter := adapters.NewSimAdapter(services)
net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{}) net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{})
if _, err := net.NewNodeWithConfig(&adapters.NodeConfig{Id: id, Service: "test"}); err != nil { if _, err := net.NewNodeWithConfig(&adapters.NodeConfig{Id: id, Service: "test"}); err != nil {