この記事は1年以上前に投稿された記事で現在は正しい情報とは限りません。

WebRTCサービスのGoInstant触ってみたので基本的なところを紹介してみまっす。

 

GoInstantの紹介は以下のWebサイトが詳しいです。

リアルタイムBaaS「GoInstant」の概要

 

超カンタンに言うと、GoInstantはチャットやWeb会議的なリアルタイムコミュニケーションアプリを

簡単に作るためのサービス(Baas)です。

 

GoInstantではRoomという概念があります。

これはデータ伝達範囲の単位で、GoInstantでは同一Room内でのみデータのやり取りが行われます。

GoInstantではRoomに対して各ユーザがJoin(ログイン的なもの)して、Room内のデータを操作したり

同一Roomの他のユーザがデータを更新したら、即座に画面に反映したりといったことが出来ます。

一人のユーザが複数のRoomにJoinすることもできます。

 

Room内のデータは階層構造で持っていて、JSONみたいな感じです。

JSONのプロパティに当たる部分をGoInstantではkeyと呼びます。

(むしろJSONでもkeyって呼ぶ気がするけど…)

 

概念的なことはさておき、これ以上説明するとボロが出る百聞は一見に如かずということで、

実際にコードを書いていきます!

 

GoInstantに接続(RoomにJoin)

以下のようなコードを書けばOK。

これを実行するとguestアカウント(匿名)としてデフォルトのRoomである[Lobby]にjoinします。

lobby

 

guestアカウントの表示名やJoinするRoomを指定するにはconnectメソッドの部分を

以下のように書き換えるだけ。

TestRoom

 

基本的にはこのconnectを実行した後の非同期コールバック関数の引数に入る

roomやconnectionを使って色々と操作をすることになります。

 

Room内にJoinしているユーザ一覧を取得する

connect実行後のコールバック関数のroomオブジェクトを使って

と書けばOK。

 

room.usersはroom.key(“./users”))と同じで

対象RoomにJoinしているユーザリストのkeyを取得します。

 

Object.keys(users)でusersオブジェクトのキーを全て取得してます。

arrayだったらforで回せば良いですが、ユーザ一覧としてユーザIDをプロパティとしたオブジェクトが

返ってくるため、一覧を取得するにはキー値を全て取得する必要があります。

 

 

上記の方法はPromiseを使ってます。

Promiseを使わないやり方だと、get(function(){})って感じになって

後続の処理があったりするとコールバック&ネスト地獄になるので、Promise使った方がスッキリします。

 

connectの部分もPromiseを使うと

と書き換えることができます。

 

Roomへの入退出(Join,Leave)を検知して処理する

 

検証するにはGoInstantをサポートするブラウザを2つ立ち上げて、同一RoomにJoinします。

Chromeの場合はシークレット・ウィンドウを使うと楽です。

 

入退出するとこんな感じになります。

joinGuest

leaveGuest

 

自分自身の情報を取得する

 

ちなみにGuestアカウントですが、GuestでJoinするとlocalStorageに以下のようなデータが格納されます。

JWTっぽい。

guestId_localstorage

 

あと、Guestの場合はidとかproviderとかgroupsは自動で割り振られて変更できません。

 

connectのところで以下のようにJWTを投げると、GuestではないAuthenticatedなUserでログインできます。

JWTの生成はこの記事を参考ください。