Class: OSC::Bundle

Inherits:
Array
  • Object
show all
Defined in:
lib/ruby-osc/bundle.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(timetag = nil, *args) ⇒ Bundle

Returns a new instance of Bundle.

Raises:

  • (TypeError)


6
7
8
9
10
11
# File 'lib/ruby-osc/bundle.rb', line 6

def initialize(timetag = nil, *args)
  args.each{ |arg| raise TypeError, "#{ arg.inspect } is required to be a Bundle or Message" unless Bundle === arg or Message === arg }
  raise TypeError, "#{ timetag.inspect } is required to be Time or nil" unless timetag.nil? or Time === timetag
  super args
  @timetag = timetag
end

Instance Attribute Details

#timetagObject

Returns the value of attribute timetag.



4
5
6
# File 'lib/ruby-osc/bundle.rb', line 4

def timetag
  @timetag
end

Class Method Details

.decode(string) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/ruby-osc/bundle.rb', line 28

def self.decode(string)
  string.sub!(/^#bundle\000/, "")
  t1, t2, content_str = string.unpack("N2a*")

  timetag   = t1 == 0 && t2 == 1 ? nil : Time.at(t1 + t2 / (2**32.0) - 2_208_988_800)
  scanner   = StringScanner.new content_str
  args      = []

  until scanner.eos?
    size    = scanner.scan(/.{4}/).unpack("N").first
    arg_str = begin
                scanner.scan(/.{#{ size }}/nm)
              rescue
                raise(DecodeError, "An error occured while trying to decode bad formatted osc bundle")
              end
    args << OSC.decode(arg_str)
  end

  new timetag, *args
end

Instance Method Details

#==(other) ⇒ Object



49
50
51
# File 'lib/ruby-osc/bundle.rb', line 49

def ==(other)
  self.class == other.class and timetag == other.timetag and to_a == other.to_a
end

#encodeObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/ruby-osc/bundle.rb', line 13

def encode
  timetag =
    if @timetag
      time, _tag, dir = OSC.encoding_directive(@timetag)
      time.pack dir
    else
      "\000\000\000\000\000\000\000\001"
    end

  "#bundle\000#{ timetag }" + collect do |x|
    x = x.encode
    [x.size].pack("N") + x
  end.join
end

#to_aObject



53
# File 'lib/ruby-osc/bundle.rb', line 53

def to_a; Array.new self; end

#to_sObject



55
56
57
# File 'lib/ruby-osc/bundle.rb', line 55

def to_s
  "OSC::Bundle(#{ join(', ') })"
end