Created
March 5, 2010 11:25
-
-
Save jballanc/322646 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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