Usando Leap Motion com RubyMotion OSX

Depois de algumas horas tentando fazer com que o dylib do Leap Motion compilasse em um aplicativo RubyMotion, desisti e segui a rota WebSocket, inspirado por leapmotion-ruby e RubyMotion か ら WebSocket を 使 う. Veja como eu fiz.

Primeiro, eu adicionei gem 'motion-cocoapods'ao meu Gemfile e corri bundle install. Então eu adicionei isso ao meu Rakefile:

Motion::Project::App.setup do |app|
app
.name = '...'

app
.pods do
pod
'SocketRocket'
pod
'JSONKit'
end
end

Após a execução, rake pod:installvocê deve estar pronto para iniciar as dependências. Agora, no applicationDidFinishLaunching:método do seu AppDelegate, adicione isto para configurar o WebSocket:

url = NSURL.URLWithString('ws://127.0.0.1:6437')
@socket = SRWebSocket.alloc.initWithURLRequest(NSURLRequest.requestWithURL(url))
@socket.delegate = self
@socket.open

Agora adicione os seguintes métodos delegados SocketRocket à sua classe AppDelegate e você estará pronto para ir:

def webSocketDidOpen(webSocket)
data
= '{"enableGestures":true}'
@socket.send(data)
end

def webSocket(webSocket, didReceiveMessage:message)
error_ptr
= Pointer.new(:object)
parsed
= message.description.objectFromJSONStringWithParseOptions(JKParseOptionValidFlags, error:error_ptr)

if parsed.nil?
error
= error_ptr[0]
puts error
.userInfo[NSLocalizedDescriptionKey]
else
p parsed

end
end

def webSocket(webSocket, didFailWithError:error)
p
"Error : #{error.description}"
end

def webSocket(webSocket, didCloseWithCode:code,reason:reason)
p
"Close"
end

O primeiro método envia uma mensagem ao controlador para iniciar o rastreamento de gestos. Se não precisar deles, você pode remover essas linhas.