4 log "github.com/sirupsen/logrus"
7 "github.com/vapor/p2p/connection"
11 logModule = "consensus"
12 ConsensusChannel = byte(0x50)
13 maxBlockchainResponseSize = 22020096 + 2
16 type ConsensusReactor struct {
21 func NewConsensusReactor(manager *Manager) *ConsensusReactor {
22 cr := &ConsensusReactor{
25 cr.BaseReactor = *p2p.NewBaseReactor("ConsensusReactor", cr)
29 // GetChannels implements Reactor
30 func (cr *ConsensusReactor) GetChannels() []*connection.ChannelDescriptor {
31 return []*connection.ChannelDescriptor{
35 SendQueueCapacity: 100,
40 // OnStart implements BaseService
41 func (cr *ConsensusReactor) OnStart() error {
42 cr.BaseReactor.OnStart()
46 // OnStop implements BaseService
47 func (cr *ConsensusReactor) OnStop() {
48 cr.BaseReactor.OnStop()
51 // AddPeer implements Reactor by sending our state to peer.
52 func (cr *ConsensusReactor) AddPeer(peer *p2p.Peer) error {
57 // RemovePeer implements Reactor by removing peer from the pool.
58 func (cr *ConsensusReactor) RemovePeer(peer *p2p.Peer, reason interface{}) {
59 cr.mgr.RemovePeer(peer.Key)
62 // Receive implements Reactor by handling 4 types of messages (look below).
63 func (cr *ConsensusReactor) Receive(chID byte, src *p2p.Peer, msgBytes []byte) {
64 msgType, msg, err := decodeMessage(msgBytes)
66 log.WithFields(log.Fields{"module": logModule, "err": err}).Error("fail on reactor decoding message")
70 cr.mgr.processMsg(src.ID(), msgType, msg)