Class: OSCAccess::Receiver

Inherits:
Object
  • Object
show all
Defined in:
lib/osc-access/receiver.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Receiver

Returns a new instance of Receiver.



8
9
10
11
12
# File 'lib/osc-access/receiver.rb', line 8

def initialize(options = {})
  @receivers = []
  @servers = {}
  @cached_message = nil
end

Instance Attribute Details

#servers ⇒ Object (readonly)

Returns the value of attribute servers.



6
7
8
# File 'lib/osc-access/receiver.rb', line 6

def servers
  @servers
end

Class Method Details

.server(port) ⇒ Object



42
43
44
45
46
47
# File 'lib/osc-access/receiver.rb', line 42

def self.server(port)
  @servers ||= {}
  @servers[port] ||= { :server => OSC::EMServer.new(port) }
  @servers[port][:thread] ||= thread_for(port)
  @servers[port]
end

.thread_for(port) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/osc-access/receiver.rb', line 49

def self.thread_for(port)
  @servers[port][:thread] ||= Thread.new do
    @servers[port][:service] ||= Zeroconf::Service.new("Ruby", port).start
    Thread.abort_on_exception = true
    @servers[port][:server].run
  end
end

Instance Method Details

#add_receiver(target_obj, pattern, options = {}, &block) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/osc-access/receiver.rb', line 31

def add_receiver(target_obj, pattern, options = {}, &block)
  receiver = { 
    :target_obj => target_obj, 
    :pattern => pattern, 
    :options => options, 
    :action => block 
  }
  @receivers << receiver
  @servers.values.each { |server| add_method(server[:server], receiver) }     
end

#add_server(port) ⇒ Object



24
25
26
27
28
29
# File 'lib/osc-access/receiver.rb', line 24

def add_server(port)
  server = self.class.server(port)
  @servers[port] = server
  @receivers.each { |receiver| add_method(server[:server], receiver) }
  @servers[port][:thread]
end

#join(options = {}) ⇒ Object



18
19
20
21
22
# File 'lib/osc-access/receiver.rb', line 18

def join(options = {})
  port = options[:port]
  thread = port.nil? ? threads.last : @servers[port][:thread]
  thread.join
end

#threads ⇒ Object



14
15
16
# File 'lib/osc-access/receiver.rb', line 14

def threads
  @servers.values.map { |server| server[:thread] }
end