Class: Firecracker::UDPScraper

Inherits:
Base
  • Object
show all
Defined in:
lib/firecracker/udp_scraper.rb

Instance Method Summary collapse

Methods inherited from Base

#debug?, #hashes, #initialize, #timeout, #valid?

Constructor Details

This class inherits a constructor from Firecracker::Base

Instance Method Details

#process!Object

Returns Hash Example: {

c2cff4acc8f5b49fd6b93b88fc0423467fbb08b0: {
  downloads: 123,
  complete: 456,
  incomplete: 789
}

}.

Returns:

  • Hash Example: {

    c2cff4acc8f5b49fd6b93b88fc0423467fbb08b0: {
      downloads: 123,
      complete: 456,
      incomplete: 789
    }
    

    }



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/firecracker/udp_scraper.rb', line 16

def process!
  raise "both #tracker and #hashes/#hash must be set" unless valid?
  
  # Handshake
  data = send(to_hex(4497486125440, 8) + to_hex(0, 4) + transaction_id)
  request_error! unless data
  
  # Main request
  data = send(data[16..31] + to_hex(2, 4) + transaction_id + hashes.join)
  request_error! unless data

  index = 16
  results = {}
  
  loop do
    break unless data[index + 23]

    completed = data[(index + 8)..index + 15].to_i(16)
    leechers  = data[(index + 16)..index + 23].to_i(16)
    seeders   = data[index..index + 7].to_i(16)
    hash      = hashes[(index - 16)/24]

    results.merge!({
      hash => {
        downloads: completed,
        seeders: seeders,
        leechers: leechers
      }
    })

    index += 24
  end

  return results
end