QiMessaging Javascript (qiSDK js bindings) を読む


はじめに

QiMessaging Javascript とは?

この記事は?

  • そんなライブラリのソースコードを読んで、シーケンス図・やり取りされるデータの内容等を簡単にまとめています。ライブラリ自体は 151 行しかありません。
bash
$ wc -l libs/qi/2/qi.js
     151 libs/qi/2/qi.js

シーケンス図

図について

  • 大まかな流れが分かれば良いと思っているので、結構大雑把です。
  • また、Promise について、UML ではどう書いたら良いのかを知らないので、何となく読めれば良いか、くらいの適当な感じで書いてます。

内容について

  • 大きく「セッション作成」(create session)、「モジュールのオブジェクト取得」(create module object)、「モジュールのメソッド呼び出し」(call method)部分に分けて書いています。

データ

  • js - NAOqi 間のデータ送受信は Socket.IO (v0.9.11) が使われています。

js -> NAOqi

  • "call" イベントとして、以下のような形式のデータを送信します。
{
  "idm": IDM(int),
  {
    "obj": OBJ(string),
    "member": MEMBER(string),
    "args": [
      ...
    ]
}
  • idm: セッション内のオブジェクトを識別するための ID
  • obj: モジュール名
  • member: メソッド名
  • args: メソッドの引数

NAOqi -> js

  • "reply" イベントで以下のような形式のデータを受信します。
{
  "idm": IDM(int),
  "result": {
    "pyobject": PYOBJECT(string),
    "metaobject": {
      "methods": [
        { "name": NAME(string) }, 
        ...
      ],
      "signals": [
        { "name": NAME(string) }, 
        ...
      ],
      "properties": [
        { "name": NAME(string) }, 
        ...
      ]
    }
  }
}
  • idm: セッション内のオブジェクトを識別するための ID
  • result: リクエスト結果
  • pyobject:
  • metaobject: モジュール情報
  • methods: メソッド一覧
  • signals: シグナル一覧?
  • properties: プロパティ一覧?

感想

  • Socket.IO でデータをやり取りするだけのようですね。
  • Socket.IO (v0.9.11) というのが残念なところです。