Sha256: 5eb50aa318f393130d1efb90ac121b7bb81a5e28fb1b5ff62b6f3d16ca57cefa

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

=begin rdoc
  Columbus Dns-sd lookup
  
  Client
=end
require "set"

module Columbus
  class FoundService
    attr_accessor :name, :host, :port, :description
    def initialize(name, host, port, description)
      @name = name
      @host = host
      @port = port
      @description = description
    end
    def to_s
      "#{name}\t#{host}\t#{port}\t#{description}"      
    end
  end
  class Client
    class << self
      
      attr_accessor :discover_type
      
      def discover_type
        @discover_type ||= "_presence._tcp"
      end
      
      def discover(timeout=5)
        waiting_thread = Thread.current

        dns = DNSSD.browse discover_type do |reply|
          DNSSD.resolve reply.name, reply.type, reply.domain do |resolve_reply|
            service = FoundService.new(reply.name,
                                      resolve_reply.target,
                                      resolve_reply.port,
                                      (resolve_reply.text_record['description'].to_s rescue ""))
            begin
              yield service
            rescue Done
              waiting_thread.run
            end
          end
        end
        puts "Gathering for up to #{timeout} seconds for #{discover_type}..."
        sleep timeout
        dns.stop
      end

      def service_list
        list = Set.new
        discover { |obj| list << obj }
        return list
      end

      def list
        service_list.each do |service|
          puts "=== #{service.name} on #{service.host}:#{service.port} ==="
          puts " found #{service.name}"
          puts "    #{service.description}"
        end
      end
      
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
auser-columbus-0.0.3 lib/columbus/client.rb
auser-columbus-0.0.4 lib/columbus/client.rb