Class: Airplay::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/airplay/client.rb

Defined Under Namespace

Classes: ServerNotFoundError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server = false) ⇒ Client

Returns a new instance of Client.



4
5
6
7
# File 'lib/airplay/client.rb', line 4

def initialize(server = false)
  browse unless server
  use servers.first if servers.any?
end

Instance Attribute Details

#active_serverObject (readonly)

Returns the value of attribute active_server.



2
3
4
# File 'lib/airplay/client.rb', line 2

def active_server
  @active_server
end

#serversObject (readonly)

Returns the value of attribute servers.



2
3
4
# File 'lib/airplay/client.rb', line 2

def servers
  @servers
end

Instance Method Details

#browseObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/airplay/client.rb', line 21

def browse
  @servers = []
  DNSSD.browse!(Airplay::Protocol::SEARCH) do |reply|
    resolver = DNSSD::Service.new
    target = nil
    resolver.resolve(reply) do |resolved|
      target = resolved.target
      break unless resolved.flags.more_coming?
    end
    info = Socket.getaddrinfo(target, nil, Socket::AF_INET)
    ip_address = info[0][2]
    @servers << Airplay::Node.new(reply.name, reply.domain, ip_address)
    break unless reply.flags.more_coming?
  end
  @servers
end

#find_by_name(name) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/airplay/client.rb', line 13

def find_by_name(name)
  found_server =  @servers.detect do |server|
    server if server.name == name
  end
  raise Airplay::Client::ServerNotFoundError unless found_server
  found_server
end

#send_image(image, transition = :none) ⇒ Object



38
39
40
# File 'lib/airplay/client.rb', line 38

def send_image(image, transition = :none)
  Airplay::Protocol::Image.new(@active_server.ip).send(image, transition)
end

#use(server) ⇒ Object



9
10
11
# File 'lib/airplay/client.rb', line 9

def use(server)
  @active_server = server.is_a?(Airplay::Node) ? server : find_by_name(server)
end