p2p: get rw for running spec

This commit is contained in:
Anton Evangelatov 2019-01-04 12:45:56 +01:00
parent 0697704f5f
commit 5b2adc135f
2 changed files with 17 additions and 1 deletions

View file

@ -345,6 +345,17 @@ outer:
return result
}
func (p *Peer) GetRW(name string, version uint) (MsgReadWriter, error) {
for _, proto := range p.running {
if proto.Name == name && proto.Version == version {
var rw MsgReadWriter = proto
return rw, nil
}
}
return nil, errors.New("not found")
}
func (p *Peer) startProtocols(writeStart <-chan struct{}, writeErr chan<- error) {
p.wg.Add(len(p.running))
for _, proto := range p.running {

View file

@ -223,10 +223,15 @@ func NewPeer(p *p2p.Peer, rw p2p.MsgReadWriter, spec *Spec) *Peer {
}
// ClonePeer constructs a peer object with an arbitrary Spec, based on an existing Peer
// if Peer doesn't support Spec, it returns nil
func ClonePeer(p *Peer, spec *Spec) *Peer {
rw, err := p.Peer.GetRW(spec.Name, spec.Version)
if err != nil {
return nil
}
return &Peer{
Peer: p.Peer,
rw: p.rw,
rw: rw,
spec: spec,
}
}