LoginSignup
4
4

More than 5 years have passed since last update.

Leap Motion Controllerが接続されているかどうか調べる

Posted at

Leap Motion ControllerをJavaScript(leapjs)で扱う時の話です(WebSocket経由で触るなら他の言語でも同じだろうと思います。SDKは知らない)。

Leapが接続されている時だけ専用の操作を有効化したい、というのは普通のことだと思います。
そこで、「今現在Leapが接続されているかどうか」を取得したくなるわけですが、実は、この為のAPIという物がありません。Leapが発火する幾つかのイベントを監視することで、自分で状態管理をすることになります。

まず、connectイベント。
これはJavaScriptがLeapのWebSocketサーバーに接続した時に発火します。気を付けないといけないのは、 たとえLeapが接続されていなくても このイベントは発火する、ということです。
Leap自体が無くてもWebSocketサーバー自体はずっと上がってて、Leapの接続を待っているみたいです。

なのでconnectではなくてdeviceConnectedを見張っておけば、実際にLeapが接続した時が分かると思いきや、これもだめ。最初からLeapを繋いだ状態で、(leapjsを使う)アプリケーションを起動した時に発火しません。connectは発火するのですが、その時にLeapが接続しているかどうかは分かりません。

ではどうすればいいのかというと、readyを待ち受けます。readyは、WebSocketサーバーに接続し、かつLeapが利用可能になった時に発火するので、後からLeapを繋げた時も、アプリ起動時に既に接続済みだった時も、どちらも検知することができます。

これを踏まえると、今現在、Leapが接続されているかどうかを知るには、次のように状態管理すればいいことになります。

  1. 初期状態では「未接続」とする
  2. readyになったら「接続済み」とする
  3. deviceDisconnectedになったら「未接続」とする
  4. deviceConnectedになったら「接続済み」とする
  5. disconnectedになったら「未接続」とする
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4