class Myo::Chamber

Attributes

callbacks_[RW]

Public Class Methods

new(socket_url) click to toggle source
# File lib/myo/client.rb, line 4
def initialize(socket_url)
  @socket_url = socket_url
  @callbacks_ = {}
  @pool_      = {}
end

Public Instance Methods

getRoll() click to toggle source
# File lib/myo/client.rb, line 10
def getRoll
  @pool_[:latest_orientation].accel.x
end
start() click to toggle source
# File lib/myo/client.rb, line 14
def start
  EM.run do
    conn = EventMachine::WebSocketClient.connect(@socket_url)

    conn.callback do
      return unless @callbacks_[:connected]
      instance_eval(&@callbacks_[:connected])
    end

    conn.errback do |e|
      return unless @callbacks_[:error]
      instance_eval(e, &@callbacks_[:error])
    end

    conn.stream do |msg|
      conn.close_connection if msg.data == "done"

      event = JSON.parse(msg.data)[1]
      case event['type']
      when 'pose'
        break unless @callbacks_[:pose]
        pose = event['pose']
        instance_eval(@pool_[:prev_pose], :off, &@callbacks_[:pose]) if @pool_[:prev_pose]
        instance_eval(pose, :on, &@callbacks_[:pose])
        @pool_[:prev_pose] = pose
      when 'orientation'
        break unless @callbacks_[:periodic]
        e = OpenStruct.new({
          :accel => OpenStruct.new({
            :x => event['accelerometer'][0],
            :y => event['accelerometer'][1],
            :z => event['accelerometer'][2]
          }),
          :gyro => OpenStruct.new({
            :x => event['gyroscope'][0],
            :y => event['gyroscope'][1],
            :z => event['gyroscope'][2]
          }),
          :orientation => OpenStruct.new(event['orientation'])
        })
        @pool_[:latest_orientation] = e
        instance_eval(e, &@callbacks_[:periodic])
      end
    end

    conn.disconnect do
      EM::stop_event_loop
    end
  end
end