lib/osc-ruby/osc_packet.rb in osc-ruby-1.1.0 vs lib/osc-ruby/osc_packet.rb in osc-ruby-1.1.1
- old
+ new
@@ -1,9 +1,11 @@
require File.join( File.dirname( __FILE__ ), 'network_packet')
require 'ostruct'
module OSC
+ class UnknownType < StandardError; end
+
class OSCPacket
def self.messages_from_network( string, ip_info=nil )
messages = []
osc = new( string )
@@ -43,14 +45,15 @@
end
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 )}
+ @types = { "i" => lambda{ OSCInt32.new( get_int32 ) },
+ "f" => lambda{ OSCFloat32.new( get_float32 ) },
+ "d" => lambda{ OSCDouble64.new( get_double64 )},
+ "s" => lambda{ OSCString.new( get_string ) },
+ "b" => lambda{ OSCBlob.new( get_blob )}
}
end
def get_bundle_messages
bundle_messages = []
@@ -91,11 +94,13 @@
tags = get_string
args = []
tags.scan(/./) do | tag |
- args << @types[tag].call
+ type_handler = @types[tag]
+ raise( UnknownType, "Unknown OSC type: #{tag}" ) unless type_handler
+ args << type_handler.call
end
args
end
end
@@ -110,10 +115,16 @@
f = @packet.getn(4).unpack('g')[0]
@packet.skip_padding
f
end
+ def get_double64
+ f = @packet.getn(8).unpack('G')[0]
+ @packet.skip_padding
+ f
+ end
+
def get_blob
l = @packet.getn(4).unpack('N')[0]
b = @packet.getn(l)
@packet.skip_padding
b
@@ -125,6 +136,6 @@
def string_delemeter
"\x00"
end
end
-end
\ No newline at end of file
+end