Exemplo n.º 1
0
       /* void block_gen_loop()
        {
             try {
                while( true )
                {
                   fc::usleep( fc::seconds(5) );

                   auto order_trxs   = chain.match_orders(); 
                   pending.insert( pending.end(), order_trxs.begin(), order_trxs.end() );
                   if( pending.size() )
                   {
                      auto new_block = chain.generate_next_block( pending );
                      pending.clear();
                      if( new_block.trxs.size() )
                      {
                        chain.push_block( new_block );
                        fc::async( [=](){ broadcast_block(new_block); } );
                      }
                   }
                }
             } 
             catch ( const fc::exception& e )
             {
                elog("${e}", ("e", e.to_detail_string()  ) );
                exit(-1);
             }
        }
        */
        void broadcast_block( const bts::blockchain::trx_block& blk )
        {
            // copy list to prevent yielding in middle...
            auto cons = connections;
            
            block_message blk_msg;
            blk_msg.block_data = blk;
            for( auto itr = cons.begin(); itr != cons.end(); ++itr )
            {
               try {
                  if( itr->second->get_last_block_id() == blk.prev )
                  {
                    itr->second->send( message( blk_msg ) );
                    itr->second->set_last_block_id( blk.id() );
                  }
               } 
               catch ( const fc::exception& w )
               {
                  wlog( "${w}", ( "w",w.to_detail_string() ) );
               }
            }
        }