Class: Salut::Browser

Inherits:
Object
  • Object
show all
Defined in:
lib/Salut/Browser.rb

Overview

Browsers are used for searching for services or domains. A single instance should only be used for a single search.

You should be careful not to reuse the same instance for multiple searches without calling #stop_searching, otherwise you are likely to get an error logged. The reason for this is that a browser never really stops searching (unless you call #stop_searching), even if moreComing is false. moreComing is a signal that the browser up to date on the network state for the moment but any new network state changes will trigger the callbacks again.

Instance Attribute Summary collapse

Adding callback extensions collapse

Finding domains collapse

Finding services collapse

Delegate methods collapse

Instance Method Summary collapse

Constructor Details

#initializeBrowser

Ensure that some instance variables are initialized



31
32
33
34
35
36
37
38
# File 'lib/Salut/Browser.rb', line 31

def initialize
  @browser          = NSNetServiceBrowser.alloc.init
  @browser.delegate = self
  @domains          = []
  @services         = []
  @delegates        = {}
  @searching        = false
end

Instance Attribute Details

#browserNSNetServiceBrowser (readonly)

Returns:

  • (NSNetServiceBrowser)


28
29
30
# File 'lib/Salut/Browser.rb', line 28

def browser
  @browser
end

#domainsArray<String> (readonly)

Returns:

  • (Array<String>)


22
23
24
# File 'lib/Salut/Browser.rb', line 22

def domains
  @domains
end

#searchingBoolean (readonly) Also known as: searching?

Returns:

  • (Boolean)


18
19
20
# File 'lib/Salut/Browser.rb', line 18

def searching
  @searching
end

#servicesArray<Salut::Service> (readonly)

Returns:



25
26
27
# File 'lib/Salut/Browser.rb', line 25

def services
  @services
end

Instance Method Details

#delegate(method) ⇒ Proc

A shortcut for reading/writing to the delegate methods hash

Parameters:

  • method (Symbol)

    the name of the callback

Returns:

  • (Proc)


51
52
53
54
55
56
57
# File 'lib/Salut/Browser.rb', line 51

def delegate method
  if block_given?
    @delegates[method] = Proc.new
  else
    @delegates[method]
  end
end

#find_browsable_domainsnil

Returns:

  • (nil)


63
64
65
# File 'lib/Salut/Browser.rb', line 63

def find_browsable_domains
  @browser.searchForBrowsableDomains
end

#find_services(service_type, domain_name = '') ⇒ Object

TODO:

find a way to use default arguments

Parameters:

  • service_name (String)
  • domain_name (String) (defaults to: '')


75
76
77
# File 'lib/Salut/Browser.rb', line 75

def find_services service_type, domain_name = ''
  @browser.searchForServicesOfType service_type, inDomain:domain_name
end

#netServiceBrowser(sender, didNotSearch: error_dict) {|sender, error_dict| ... } ⇒ Object

Yield Parameters:



87
88
89
90
91
# File 'lib/Salut/Browser.rb', line 87

def netServiceBrowser sender, didFindDomain:domain_name, moreComing:more
  @domains << domain_name
  @delegates[__method__].call self, domain_name, more if @delegates[__method__]
  Salut.log.info "Found domain: #{domain_name}"
end

#netServiceBrowserDidStopSearch(sender) {|sender| ... } ⇒ Object

Yield Parameters:



143
144
145
146
147
# File 'lib/Salut/Browser.rb', line 143

def netServiceBrowserDidStopSearch sender
  @searching = false
  @delegates[__method__].call self if @delegates[__method__]
  Salut.log.info "Done searching (#{sender.description})"
end

#netServiceBrowserWillSearch(sender) {|sender| ... } ⇒ Object

Yield Parameters:



128
129
130
131
132
# File 'lib/Salut/Browser.rb', line 128

def netServiceBrowserWillSearch sender
  @searching = true
  @delegates[__method__].call self if @delegates[__method__]
  Salut.log.info "Starting search (#{sender.description})"
end

#stop_findingObject Also known as: stop_finding_domains, stop_finding_services

Stop searching for things, whether they be domains or services



41
42
43
# File 'lib/Salut/Browser.rb', line 41

def stop_finding
  @browser.stop
end