OSDN Git Service

Add sync completion status broadcast function (#1208)
authoryahtoo <yahtoo.ma@gmail.com>
Fri, 3 Aug 2018 02:37:59 +0000 (10:37 +0800)
committerPaladz <yzhu101@uottawa.ca>
Fri, 3 Aug 2018 02:37:59 +0000 (10:37 +0800)
* Add sync completion status broadcast function

* Del peer unused variable knownStatus

netsync/block_keeper.go
netsync/peer.go

index 637744b..69553c1 100644 (file)
@@ -387,6 +387,11 @@ func (bk *blockKeeper) startSync() bool {
 }
 
 func (bk *blockKeeper) syncWorker() {
+       genesisBlock, err := bk.chain.GetBlockByHeight(0)
+       if err != nil {
+               log.WithField("err", err).Error("fail on handleStatusRequestMsg get genesis")
+               return
+       }
        syncTicker := time.NewTicker(syncCycle)
        for {
                <-syncTicker.C
@@ -402,5 +407,9 @@ func (bk *blockKeeper) syncWorker() {
                if err := bk.peers.broadcastMinedBlock(block); err != nil {
                        log.WithField("err", err).Error("fail on syncWorker broadcast new block")
                }
+
+               if err = bk.peers.broadcastNewStatus(block, genesisBlock); err != nil {
+                       log.WithField("err", err).Error("fail on syncWorker broadcast new status")
+               }
        }
 }
index efe8c1f..72191c1 100644 (file)
@@ -271,6 +271,18 @@ func (ps *peerSet) broadcastMinedBlock(block *types.Block) error {
        return nil
 }
 
+func (ps *peerSet) broadcastNewStatus(bestBlock, genesisBlock *types.Block) error {
+       genesisHash := genesisBlock.Hash()
+       msg := NewStatusResponseMessage(&bestBlock.BlockHeader, &genesisHash)
+       for _, peer := range ps.peers {
+               if ok := peer.TrySend(BlockchainChannel, struct{ BlockchainMessage }{msg}); !ok {
+                       ps.removePeer(peer.ID())
+                       continue
+               }
+       }
+       return nil
+}
+
 func (ps *peerSet) broadcastTx(tx *types.Tx) error {
        msg, err := NewTransactionMessage(tx)
        if err != nil {