OSDN Git Service

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