X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=netsync%2Fconsensusmgr%2Fhandle.go;h=a9e3a631288286ae2dbca81446bc4948dd65fe88;hb=refs%2Fheads%2Fblock_fetcher;hp=702df7209652681e342d3be003a3a30fce1b0a41;hpb=32605ab49e746065f4b5a68301ce080d1576c6ef;p=bytom%2Fvapor.git diff --git a/netsync/consensusmgr/handle.go b/netsync/consensusmgr/handle.go index 702df720..a9e3a631 100644 --- a/netsync/consensusmgr/handle.go +++ b/netsync/consensusmgr/handle.go @@ -26,6 +26,17 @@ type Chain interface { ProcessBlockSignature(signature, pubkey []byte, blockHash *bc.Hash) error } +type Peers interface { + AddPeer(peer peers.BasePeer) + BroadcastMsg(bm peers.BroadcastMsg) error + GetPeer(id string) *peers.Peer + MarkBlock(peerID string, hash *bc.Hash) + MarkBlockSignature(peerID string, signature []byte) + ProcessIllegal(peerID string, level byte, reason string) + RemovePeer(peerID string) + SetStatus(peerID string, height uint64, hash *bc.Hash) +} + type blockMsg struct { block *types.Block peerID string @@ -35,7 +46,7 @@ type blockMsg struct { type Manager struct { sw Switch chain Chain - peers *peers.PeerSet + peers Peers blockFetcher *blockFetcher eventDispatcher *event.Dispatcher @@ -43,7 +54,7 @@ type Manager struct { } // NewManager create new manager. -func NewManager(sw Switch, chain Chain, dispatcher *event.Dispatcher, peers *peers.PeerSet) *Manager { +func NewManager(sw Switch, chain Chain, peers Peers, dispatcher *event.Dispatcher) *Manager { manager := &Manager{ sw: sw, chain: chain, @@ -67,7 +78,7 @@ func (m *Manager) processMsg(peerID string, msgType byte, msg ConsensusMessage) return } - logrus.WithFields(logrus.Fields{"module": logModule, "peer": peer.Addr(), "type": reflect.TypeOf(msg), "message": msg.String()}).Info("receive message from peer") + logrus.WithFields(logrus.Fields{"module": logModule, "peer": peer.Addr(), "type": reflect.TypeOf(msg), "message": msg.String()}).Debug("receive message from peer") switch msg := msg.(type) { case *BlockProposeMsg: @@ -95,12 +106,12 @@ func (m *Manager) handleBlockProposeMsg(peerID string, msg *BlockProposeMsg) { } func (m *Manager) handleBlockSignatureMsg(peerID string, msg *BlockSignatureMsg) { + m.peers.MarkBlockSignature(peerID, msg.Signature) blockHash := bc.NewHash(msg.BlockHash) if err := m.chain.ProcessBlockSignature(msg.Signature, msg.PubKey, &blockHash); err != nil { m.peers.ProcessIllegal(peerID, security.LevelMsgIllegal, err.Error()) return } - m.peers.MarkBlockSignature(peerID, msg.Signature) } func (m *Manager) blockProposeMsgBroadcastLoop() { @@ -180,6 +191,7 @@ func (m *Manager) removePeer(peerID string) { //Start consensus manager service. func (m *Manager) Start() error { + go m.blockFetcher.blockProcessorLoop() go m.blockProposeMsgBroadcastLoop() go m.blockSignatureMsgBroadcastLoop() return nil