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