def received_block(block, peer)
if @in_endgame
@peers_m.synchronize { @peers.each { |p| p.cancel block if p.running? && (p != peer)} }
end
send_event(:received_block, block, peer.name)
piece = @package.pieces[block.pindex]
if piece.complete?
if piece.valid?
@peers_m.synchronize { @peers.each { |peer| peer.have_piece piece } }
send_event(:have_piece, piece)
else
rt_warning "#{self}: received data for #{piece} does not match SHA1 hash, discarding"
send_event(:discarded_piece, piece)
piece.discard
end
end
end