背景
本稿を開かれた方は「不思議なタイトルの投稿だな」と思われて開かれた事と存じます。peer_id と token を受け取るのって、ゴールでもマイルストンでもなんでもなくて、将にスタート地点のはずなのに?
そのとうりなのですが、若い人のようなスマートさのない老齢の身では、わからぬ事だらけで試行錯誤を繰り返し、スタート地点までたどり着くまでに疲れ果てしまうという、東京マラソンのスタートみたいな情けない顛末に至りました次第、どなたかのご参考になればとご報告させていただく次第です
参考にした資料
以下の資料を参考にいたしました
- 「SkyWay WebRTC Gateway」試験提供開始
- github
- SkyWay WebRTC Gatewayハンズオン
その他、10月29日の時点で、SkyWay のコミュニティエディションのコンソールには SkyWay WebRTC Gateway に関して参照できる資料はみつけられなかったのですが、コミュニティサイトに 7件の QA があったのでそちらも参考にさせていただきました
正解
先に正解だと今の私が思っているプロセスをご紹介しておきます
githubのreadme にある Download から ARM 用のバイナリ Raspberry Pi にダウンロード
ダウンロードした gateway_linux_arm を実行すると port 8000で listen を始めるので、そこに向けて下記のように /peers の api を叩く
curl -H 'Content-Type:application/json' -d '{"key": "自分のキー", "domain": "申請したドメイン"}' http://localhost:8000/peers
すると、id と token が帰ってくる
{
"command_type": "PEERS_CREATE",
"params": {
"peer_id": "帰ってきたid",
"token": "帰ってきたtoken"
}
}
たったこれだけで、ハマる所なんかなにもなさそうなのですが...
何にはまったのか
以下、たんに誤解と試行錯誤の話で技術的な話ではありません
一言でいうとダウンロードしたバイナリの役割と使い方が全くわからなかったので、REST API を wrap してくれるライブラリかなんかと勝手に誤解してました
githubのreadme の How To Use にapi があります。ごく普通の REST API に見えますが url のアドレス部分がありません。きっとどこかにあるのだろうと思って探すところから間違いがはじまります。私はこの時点で WebRTC Gateway を WebRTC と REST API を変換するインターネット上の Protocol Gateway と、ダウンロードしたバイナリはそれをなんか(サンプル見るに多分 ruby)言語から使うためのライブラリと誤解しています
で、ハンズオンの記事をみると IPアドレス付きで API を叩いているようなコメントがあるので、そこを指定して curl で POSTしてみるも、 405 Not Allowed が帰ってくるだけ...
Not Arrowed?
404 Not Found ならともかく、Not Arrowed ってどういう事?
この親切なレスポンスのおかげで鈍い私もやっと気が付きました、ダウンロードしたバイナリを介したパケットでないと許されないって事? Gateway って プロトコルゲートウェイって意味じゃなくて、SkyWay の内と外の間の Gateway ってことだったの?
で、ドキュメントを再度みるのですが gateway_linux_arm の使い方がまるでわからない ^^; 実行してみると
pi@raspberrypi:~ $ ./gateway_linux_arm
こんなかんじで無口で無愛想な所が高倉健さんみたいでカッコいいです
-h とか --help つけてもやっぱり無反応
でも、ゲートウェイというからにはなんか listen してないかと期待して lsof してみたら
pi@raspberrypi:~ $ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gateway_l 1204 pi 6u IPv6 15319 0t0 TCP *:8000 (LISTEN)
おっ、8000番でなんか聴いてるじゃん! じゃ、こいつの 8000番にさっきの API を POST したらどうなるんだ
っと、ここまで実験してやっと正解にたどり着きました。めでたし、めでたし
反省
多分、勉強会とかに参加すればこんな最初から躓かないですんだんだとおもうのですが、老齢の身で若い人の集まる所に出かけるのは難儀だし、とか思ってとりあえず手に入る資料だけではじめようとしたのが悪かったんだろうなと
しかし、gateway_linux_arm の存在理由がまだ腑に落ちず、普通に RPi から直接 REST API 叩くのではなにがダメだったんだろ?と。まあ、先に進むと自然と納得できるようになるのかもしれません
疲れたので今日はもう寝ようかと、peer_id はもう取れているので、明日中にはセンサデータをブラウザにだせるかな...