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



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ruby-osc/bundle.rb', line 26

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 = scanner.scan(/.{#{ size }}/nm) rescue raise(DecodeError, "An error occured while trying to decode bad formatted osc bundle")
    args   << OSC.decode(arg_str)
  end

  new timetag, *args
end

Instance Method Details

#==(other) ⇒ Object



43
44
45
# File 'lib/ruby-osc/bundle.rb', line 43

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

#encodeObject



13
14
15
16
17
18
19
20
21
22
23
24
# 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



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

def to_a; Array.new self; end

#to_sObject



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

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