Class: OSC::OSCPacket

Inherits:
Object show all
Defined in:
lib/osc-ruby/osc_packet.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(string) ⇒ OSCPacket

Returns a new instance of OSCPacket.



33
34
35
36
37
38
39
40
41
# File 'lib/osc-ruby/osc_packet.rb', line 33

def initialize( string )
  @packet = NetworkPacket.new( string )
  
  @types = { "i" => lambda{  OSCInt32.new(   get_int32 ) }, 
             "f" => lambda{  OSCFloat32.new( get_float32 ) },
             "s" => lambda{  OSCString.new(  get_string ) },
             "b" => lambda{  OSCBlob.new(    get_blob )}
            }
end

Class Method Details

.decode_simple_message(time, osc_packet) ⇒ Object



26
27
28
29
30
31
# File 'lib/osc-ruby/osc_packet.rb', line 26

def self.decode_simple_message( time, osc_packet )
  address = osc_packet.get_string
  args = osc_packet.get_arguments 

  Message.new_with_time(address, time, nil, *args )
end

.messages_from_network(string) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/osc-ruby/osc_packet.rb', line 7

def self.messages_from_network( string )
  messages = []
  osc = new( string )
  
  if osc.bundle?
    bundle = osc.get_string
    time = osc.get_timestamp
    
    osc.get_bundle_messages.each do | message |
      messages << decode_simple_message( time, OSCPacket.new( message ) )
    end
    
  else
    messages << decode_simple_message( time, osc )
  end
  
  return messages
end

Instance Method Details

#bundle?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/osc-ruby/osc_packet.rb', line 109

def bundle?
  !(@packet.to_s =~ /\A\#bundle/).nil?
end

#get_argumentsObject



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/osc-ruby/osc_packet.rb', line 76

def get_arguments
  if @packet.getc == ?,
    
    tags = get_string
    args = []
    
    tags.scan(/./) do | tag |
      args << @types[tag].call
    end
    args
  end
end

#get_blobObject



102
103
104
105
106
107
# File 'lib/osc-ruby/osc_packet.rb', line 102

def get_blob
  l = @packet.getn(4).unpack('N')[0]
  b = @packet.getn(l)
  @packet.skip_padding
  b
end

#get_bundle_messagesObject



43
44
45
46
47
48
49
50
51
# File 'lib/osc-ruby/osc_packet.rb', line 43

def get_bundle_messages
  bundle_messages = []
  
  until @packet.eof?
    l = @packet.getn(4).unpack('N')[0]
    bundle_messages << @packet.getn(l)
  end
  bundle_messages
end

#get_float32Object



96
97
98
99
100
# File 'lib/osc-ruby/osc_packet.rb', line 96

def get_float32
  f = @packet.getn(4).unpack('g')[0]
  @packet.skip_padding
  f
end

#get_int32Object



89
90
91
92
93
94
# File 'lib/osc-ruby/osc_packet.rb', line 89

def get_int32
  i = @packet.getn(4).unpack('N')[0]
  i -= 2**32 if i > (2**31-1)
  @packet.skip_padding
  i
end

#get_stringObject



53
54
55
56
57
58
59
60
# File 'lib/osc-ruby/osc_packet.rb', line 53

def get_string
  result = ''
  until (c = @packet.getc) == string_delemeter
   result << c
  end
  @packet.skip_padding
  result
end

#get_timestampObject



62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/osc-ruby/osc_packet.rb', line 62

def get_timestamp
  t1 = @packet.getn(4).unpack('N')[0]
  t2 = @packet.getn(4).unpack('N')[0]
  @packet.skip_padding
  
  if t1 == 0 && t2 == 1
    time = nil
  else
    time = t1 + t2.to_f / (2**32)
  end
  
  time
end

#string_delemeterObject



113
114
115
116
# File 'lib/osc-ruby/osc_packet.rb', line 113

def string_delemeter
  # ruby 1.9 has multicharacter support
  RUBY_VERSION.include?( '1.9' ) ? "\x00" : 0
end