class LogSimulator::Resolver

Public Class Methods

resolve_service(scan_time) { |found_targets| ... } click to toggle source
# File lib/resolve.rb, line 54
def self.resolve_service(scan_time)
  browser = DNSSD::Service.new
  service_name = '_debugConnection._tcp'
  puts "Browsing for #{service_name}"

  found_targets = []
  Thread.new do
    browser.browse service_name do |reply|
      Thread.new do
        Thread.exclusive do
          resolver = DNSSD::Service.new
          resolver.resolve reply do |r|
            found_targets<<Target.new(r.name,r.target,r.port)
            break unless r.flags.more_coming?
          end
        end
      end
    end
  end
  sleep scan_time
  found_targets.uniq!
  yield found_targets
end
select_target(scan_time) { |target| ... } click to toggle source
# File lib/resolve.rb, line 30
def self.select_target(scan_time)
  self.resolve_service(scan_time) do |found_targets|
    if found_targets.count <= 0
      puts 'no possible target found!'
    elsif found_targets.count == 1
      target = found_targets[0]
      yield target
    else
      puts 'Which one to connect?'
      found_targets.each_with_index do |target,index|
        puts "#{index+1}. #{target.name} - #{target.target_name}: #{target.port}"
      end

      puts 'Select: '
      selection = gets.chomp.to_i - 1
      while(selection < 0 || selection >= found_targets.count)
        puts "Select between #{0}-#{found_targets.count}"
        selection = gets.chomp.to_i - 1
      end
      yield found_targets[selection]
    end
  end
end