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