Skip to content

Instantly share code, notes, and snippets.

@jballanc
Created March 5, 2010 11:25
Show Gist options
  • Save jballanc/322646 to your computer and use it in GitHub Desktop.
Save jballanc/322646 to your computer and use it in GitHub Desktop.
#!/usr/bin/env macruby
framework 'Foundation'
class BrowserDelegate
def initialize
@services_queue = Dispatch::Queue.new('service_access_queue')
@services = []
end
def netServiceBrowserWillSearch(browser)
puts 'Oh boy! Here we go...'
end
def netServiceBrowser(browser, didFindService: a_service, moreComing: more)
puts "Got one!"
@services_queue.sync { @services << a_service }
a_service.delegate = self
a_service.resolveWithTimeout(NSNumber.numberWithInt(5).doubleValue)
a_service.scheduleInRunLoop(NSRunLoop.currentRunLoop, forMode: NSDefaultRunLoopMode)
unless more
puts 'Ok, we\'re done here...'
browser.removeFromRunLoop(NSRunLoop.currentRunLoop, forMode: NSDefaultRunLoopMode)
end
end
def netServiceDidResolveAddress(a_service)
puts "There's a #{ARGV[0]} service running at #{a_service.hostName}"
a_service.removeFromRunLoop(NSRunLoop.currentRunLoop, forMode: NSDefaultRunLoopMode)
@services_queue.sync { @services.delete_at(@services.index(a_service))}
end
def netService(a_service, didNotResolve: error)
puts "Not enough time, man!"
a_service.removeFromRunLoop(NSRunLoop.currentRunLoop, forMode: NSDefaultRunLoopMode)
@services_queue.sync { @services.delete_at(@services.index(a_service)) }
end
def still_resolving?
taking_a_while = false
@services_queue.sync { taking_a_while = @services.empty? }
taking_a_while
end
end
service_browser = NSNetServiceBrowser.alloc.init
browser_delegate = BrowserDelegate.new
service_browser.delegate = browser_delegate
service_browser.searchForServicesOfType(ARGV[0], inDomain: '')
service_browser.scheduleInRunLoop(NSRunLoop.currentRunLoop, forMode: NSDefaultRunLoopMode)
loop do
NSRunLoop.currentRunLoop.runUntilDate(NSDate.dateWithTimeIntervalSinceNow 1.0)
break unless browser_delegate.still_resolving?
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment