Sha256: 54ededf497de9cb4ebd182b4d0643a27164dfdf808456228ae85d74badd8b133

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

module OSC
  class Message < Packet
    extend Forwardable
    # include Enumerable

    attr_accessor :address
    attr_accessor :time 
    
    # undef_method :zip

    # de = (Array.instance_methods - self.instance_methods)
    # de -= %w(assoc flatten flatten! pack rassoc transpose)
    # de += %w(include? sort)

    # def_delegators(:@args, *de)
    
    def self.new_with_time( address, time, tags=nil, *args )
      message = new( address, tags, *args )
      message.time = time
      message
    end
    
    def initialize(address, tags=nil, *args)
      @address = address
      @args = []
      
      
      args.each_with_index do |arg, i|
	      if tags && tags[i]
	        case tags[i]
	          when ?i; @args << OSCInt32.new(arg)
	          when ?f; @args << OSCFloat32.new(arg)
	          when ?s; @args << OSCString.new(arg)
	          when ?b; @args << OSCBlob.new(arg)
	          when ?*; @args << arg
	          else; raise ArgumentError, 'unknown type'
	        end
	      else
	        case arg
	          when Integer;     @args << OSCInt32.new(arg)
	          when Float;       @args << OSCFloat32.new(arg)
	          when String;      @args << OSCString.new(arg)
	          when OSCArgument; @args << arg
	        end
	      end
      end
    end


    def tags() @args.collect{|x| x.tag}.join end

    def encode
      s = OSCString.new( @address ).encode
      s << OSCString.new( ',' + tags ).encode
      s << @args.collect{|x| x.encode}.join
    end

    def to_a() @args.collect{|x| x.val} end
      
    def eql?( other )
      @address == other.address &&
      to_a == other.to_a
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aberant-osc-ruby-0.1.6 lib/osc-ruby/message.rb