class Torrenter::Reactor
Public Class Methods
new(trackers, piece_index)
click to toggle source
# File lib/torrenter/reactor.rb, line 4 def initialize(trackers, piece_index) @trackers = trackers @piece_index = piece_index end
Public Instance Methods
active_peers()
click to toggle source
# File lib/torrenter/reactor.rb, line 46 def active_peers @peers.select { |peer| peer.peer_state } end
data_remaining()
click to toggle source
# File lib/torrenter/reactor.rb, line 42 def data_remaining (total_file_size - @byte_counter).fdiv(1024).fdiv(1024).round(2) end
download_bar()
click to toggle source
# File lib/torrenter/reactor.rb, line 57 def download_bar ("\u2588" * pieces(:downloaded)) + ("\u2593" * pieces(:downloading)) + (" " * pieces(:free)) + " %#{pieces(:downloaded)} downloaded " end
extract_peers()
click to toggle source
# File lib/torrenter/reactor.rb, line 9 def extract_peers @peers = @trackers.map { |tracker| tracker.peer_list if tracker.connected? }.flatten.compact end
finished?()
click to toggle source
# File lib/torrenter/reactor.rb, line 38 def finished? @piece_index.all? end
have()
click to toggle source
# File lib/torrenter/reactor.rb, line 34 def have ->(index, peer) { @piece_index[index].add_peer(peer) } end
index_percentages()
click to toggle source
# File lib/torrenter/reactor.rb, line 50 def index_percentages active_peers.map do |peer| size = peer.buffer.bytesize + peer.piece_size [peer.index, (size.fdiv @piece_length) * 100] end end
message_reactor()
click to toggle source
# File lib/torrenter/reactor.rb, line 13 def message_reactor @piece_index.verify_status @peers.each { |peer| peer.connect unless active_peers.size > 5 } puts "You are now connected to #{active_peers.size} peers." loop do break if finished? @peers.each do |peer| if peer.peer_state peer.connection_state(@piece_index, have) else peer.connect if Time.now.to_i % ((active_peers.size * 10) + 1) == 0 end end @piece_index.clean_peers $status = @piece_index.to_json end end
pieces(type)
click to toggle source
# File lib/torrenter/reactor.rb, line 61 def pieces(type) (@piece_index.count(type).fdiv(@piece_index.size) * 100).round end
server_listen()
click to toggle source
# File lib/torrenter/reactor.rb, line 31 def server_listen end