mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
p2p: fix service func register
This commit is contained in:
parent
dc58516e26
commit
31d9c08d3b
3 changed files with 17 additions and 22 deletions
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue