Sha256: 7f8f26f93598d2cd9cb282a5e15fece25d19be24ba853d2d96fce9a918de660f

Contents?: true

Size: 1.24 KB

Versions: 2

Compression:

Stored size: 1.24 KB

Contents

require 'rubygems'
require 'eventmachine'
require File.join( File.dirname( __FILE__), '..', 'osc-ruby')


module OSC
  Channel = EM::Channel.new
  
  class Connection < EventMachine::Connection 

    def receive_data data    
     Channel << OSC::OSCPacket.messages_from_network( data )
    end
  end


  class EMServer
  
    def initialize( port = 3333 )
      @port = port
      setup_dispatcher
      @tuples = []
    end
  
    def run
      EM::run { EM::open_datagram_socket "localhost",  @port, Connection }
    end
    
    def add_method(address_pattern, &proc)
      matcher = AddressPattern.new( address_pattern )
    
      @tuples << [matcher, proc]
    end  
    
  private
    def setup_dispatcher
      Channel.subscribe do  |messages|
        messages.each do |message|         
          diff =  ( message.time || 0 ) - Time.now.to_ntp 

          if diff <=  0 
            sendmesg( message )
          else  
            EM.defer  do   
              sleep(  diff  )  
              sendmesg( message )
            end  
          end  
        end  
      end
    end
  
    def sendmesg(mesg)
      @tuples.each do |matcher, obj|
        if matcher.match?( mesg.address )
          obj.call( mesg )
        end
      end
    end
  
  end
end






Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
aberant-osc-ruby-0.2.0 lib/osc-ruby/em_server.rb
osc-ruby-0.2.0 lib/osc-ruby/em_server.rb