OSDN Git Service

Optimize p2p switch code
[bytom/bytom.git] / p2p / base_reactor.go
1 package p2p
2
3 import (
4         cmn "github.com/tendermint/tmlibs/common"
5 )
6
7 type Reactor interface {
8         cmn.Service // Start, Stop
9
10         // SetSwitch allows setting a switch.
11         SetSwitch(*Switch)
12
13         // GetChannels returns the list of channel descriptors.
14         GetChannels() []*ChannelDescriptor
15
16         // AddPeer is called by the switch when a new peer is added.
17         AddPeer(peer *Peer) error
18
19         // RemovePeer is called by the switch when the peer is stopped (due to error
20         // or other reason).
21         RemovePeer(peer *Peer, reason interface{})
22
23         // Receive is called when msgBytes is received from peer.
24         //
25         // NOTE reactor can not keep msgBytes around after Receive completes without
26         // copying.
27         //
28         // CONTRACT: msgBytes are not nil.
29         Receive(chID byte, peer *Peer, msgBytes []byte)
30 }
31
32 //--------------------------------------
33
34 type BaseReactor struct {
35         cmn.BaseService // Provides Start, Stop, .Quit
36         Switch          *Switch
37 }
38
39 func NewBaseReactor(name string, impl Reactor) *BaseReactor {
40         return &BaseReactor{
41                 BaseService: *cmn.NewBaseService(nil, name, impl),
42                 Switch:      nil,
43         }
44 }
45
46 func (br *BaseReactor) SetSwitch(sw *Switch) {
47         br.Switch = sw
48 }
49 func (*BaseReactor) GetChannels() []*ChannelDescriptor              { return nil }
50 func (*BaseReactor) AddPeer(peer *Peer)                             {}
51 func (*BaseReactor) RemovePeer(peer *Peer, reason interface{})      {}
52 func (*BaseReactor) Receive(chID byte, peer *Peer, msgBytes []byte) {}