Skip to content

Protocol Between User Interface and Server

hideyukisaito edited this page Mar 15, 2013 · 12 revisions

ここでは、ユーザが操作するインターフェース(タッチパネルベース)と、データを保持しているサーバとの間のプロトコルをまとめます。

概要

プロトコルとしては、OSC を用いる事にします。

インターフェース側から接続し、以降互いにメッセージを送りあいます。 必要であれば、インターフェース側で利用するポートはルータの設定で外部から通信可能なように準備しておいて下さい。

OSC メッセージ

[Interface -> Server] /gianteyes/hello

Interface から Server に対して、自分の Port を通知します。 以下の順で引数を取ります。

  • Port ... 接続する Interface に OSC メッセージを返すときの Port 番号

上記の情報で渡された情報を元に、Server は Interface を管理します。 IP はサーバ側で取得します。 Interface からの hello を受けとった Server は、それに対して後述の /gianteyes/cameras を送り返してカメラ情報を渡します

[Interface -> Server] /gianteyes/viewpoint

Interface から Server に対して、udid で指定するカメラの方向を指定します。 以下の順で引数を取ります。

  • udid ... 動かしたいカメラの udid
  • compass ... カメラを向ける方位(0〜360 (0 or 360が北。以下同様) )
  • angle ... カメラの仰角

Interface から viewport を受けとった Server は、Remote Client に対して同様の指示をリレーします。

[Interface -> Server] /gianteyes/take

Interface から Server に対して、udid で指定したカメラに撮影リクエストを送ります。 以下の順で引数を取ります。

  • udid ... 撮影したいカメラの udid

Interface から take を受けとった Server は Remote Client に対して撮影を指示し、そこから戻ってきたデータを HTTP で閲覧可能な領域に保存して、その URL を後述の photo メッセージで Interface に通知します

[Server -> Interface] /gianteyes/camera

カメラの状態が変化した場合、Server から Interface に対して、現在のカメラの状態を通知します。 以下の順で引数を取ります

  • data ... 各カメラの情報を格納した JSON

上記 data パラメータで渡される JSON は下記のような構造として下さい。

{
  "udid": "xxxx", // カメラのudid
  "latitude": 35.663411, // 緯度情報
  "longitude": 139.70502, // 経度情報
  "compass": 0, // カメラの向いている方位
  "angle": 45, // 仰角
  "battery": 76, // バッテリ残量 (カメラが iPhone の場合のみ)
  "operable": true, // カメラがiPhoneの場合はtrue、ライブカメラの場合はfalse
  "living": false, // iPhoneカメラの接続状態
  "photos": [
    {
      "url": "http://example.com/", // 撮影した画像の URL
      "correction": 10.293, // 画角の補正値(%単位)
      "latitude": 35.663411, // 撮影したカメラの緯度
      "longitude": 139.70502, // 撮影したカメラの経度
      "compass": 0, // カメラの向いている方位(0〜360)
      "angle": 45 // カメラの仰角
    },
    // 以下、繰り返し
  ]
}

[Server -> Interface] /gianteyes/photo

Server から Interface に対して、撮影した写真の情報を通知します。 以下の順で引数を取ります

  • data ... 写真の情報を格納した JSON
{
  "udid": "xxxx", // カメラのudid
  "url": "http://example.com/", // 緯度情報
  "correction": 10.29, // 経度情報
  "latitude": 35.663411, // カメラの向いている方位
  "longitude": 139.70502, // 仰角
  "compass": 76, // バッテリ残量 (カメラが iPhone の場合のみ)
  "angle": 45
}

Server から photo を受けとった Interface は、url の画像を HTTP で取得し、合成できるよう出力します。

[Server -> Interface] /gianteyes/cameras

Server から Interface に対して、各カメラの情報を送ります 以下の順で引数を取ります

  • data ... 各カメラの情報を格納した JSON

上記 data パラメータで渡される JSON は下記のような構造として下さい。

{
  "cameras": [
    {
      "udid": "xxxx", // カメラのudid
      "latitude": 35.663411, // 緯度情報
      "longitude": 139.70502, // 経度情報
      "compass": 0, // カメラの向いている方位
      "angle": 45, // 仰角
      "battery": 76, // バッテリ残量 (カメラが iPhone の場合のみ)
      "operable": true, // カメラがiPhoneの場合はtrue、ライブカメラの場合はfalse
      "living": false, // iPhoneカメラの接続状態
      "photos": [
        {
          "url": "http://example.com/", // 撮影した画像の URL
          "correction": 10.293, // 画角の補正値(%単位)
          "latitude": 35.663411, // 撮影したカメラの緯度
          "longitude": 139.70502, // 撮影したカメラの経度
          "compass": 0, // カメラの向いている方位(0〜360)
          "angle": 45 // カメラの仰角
        },
        // 以下、繰り返し
      ]
    },
    {
      //以下、繰り返し
    }
  ]
}