WebCFace 2.5.2
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
8-2. Client Spec

WebCFace Client の動作仕様についてです。 各メッセージのデータ型の説明 8-1. Message も参照しながら読んでください。

接続

  • サーバーのアドレス(デフォルトでは7530ポート)にWebSocketで接続します。
  • 接続できたら、まずクライアント側が sync init (80) のメッセージを送信します
  • その後サーバー側から 他のクライアント(=member)に関する sync init (80), 各種データ型の entry (20〜) と、最後に sync init end (88) が送られてくることで接続は完了です。

切断

  • 切断時に送信するべきメッセージは特にありません。そのままWebSocketを切断すればよいです。

ping

  • サーバーから一定時間おきに ping (89) が送られてきたら、クライアントは ping (89) を送り返してください。
  • ping値の情報を取得したい場合は、 ping status req (91) を送ってください。 その後一定時間おきに ping status (90) が送られてきます。

データの送信 (Sync)

  • データを送信する場合、同時刻のデータとして送信したいものをすべてまとめて1回のArrayで送ります
  • それに加えて、そのArrayの最初に sync (87) を追加してください
  • value (0), text (1), image (5), robot_model (6) は名前とデータをそのまま送信します。
  • view (9), canvas2d (10), canvas3d (11) は名前と前回からの差分データのみを送ります。
    • これらは複数の要素(component)からなりますが、それぞれの要素に id (文字列) を割り当て、 idごとに前回のSync時から変化したもののみを送信します。
    • また各要素のデータと別にその要素idの並び順も送ります。これも前回のSync時から変化した場合のみでよいです。
    • id はそのView/Canvas2D/Canvas3D内で要素ごとに一意なutf-8文字列であれば、命名規則は自由です。
  • log (8) は前回送信時から追加された行のみを送信します。
    • また他のデータ型と異なりデータ内に時刻の情報も含まれています。

データの一覧 (Entry)

  • サーバーに新しく他の(無名でない)member(クライアント)が接続したとき、そのmemberの情報が sync init (80) としてサーバーから送られてきます。
  • また、新しいデータがサーバーに届いたタイミングで、サーバーから各種データのEntryが送られてきます。
    • Entryのメッセージ型はそれぞれのデータ型のkindに20を足したものになっています。
  • クライアントが接続したときすでにサーバーに存在していた他のmemberの情報やデータの情報は sync init end (88) の前にまとめて送られてきます。
  • クライアントがデータを送信する際にはサーバーにEntryを送る必要はないです。
  • 名前が半角ピリオドから始まるデータについては、Entryは送られてきません。 (Reqを送ることでデータを受信することはできます)

データのリクエスト (req)

  • データを受信するには、まず各種データ型のリクエスト (Req) を送る必要があります。
    • Reqのメッセージ型はそれぞれのデータ型のkindに40を足したものになっています。
    • Reqには受信したい相手のmember id, データの名前, リクエストidを指定します。
    • リクエストidは、クライアントがリクエストを区別するために任意に指定する1以上の整数です。
  • リクエストを送った直後と、その後そのデータが変更されたときに、サーバーから sync (87) と各種データ (Res) が送られてきます。
    • sync には member id と時刻が含まれており、そのsyncと同時にまとめて送られてきたデータはすべてそのmemberのその時刻のものです。
    • Resのメッセージ型はそれぞれのデータ型のkindに60を足したものになっています。
    • 基本的には送信時のデータ型とほぼ同じ仕様になっていますが、データ名の代わりにリクエストidとサブフィールド名が含まれています。
    • リクエストidはReqで指定したものです。毎回データ名が送られてくる代わりにidを使うことで通信量を削減しています。
    • サブフィールド名はReqで指定したデータ名に追加されるデータ名です。
      • 例えば foo という名前のデータをリクエストして、 foo の代わりに foo.bar という名前のデータがサーバーに存在した場合、 foo のリクエストidと サブフィールド名 bar とともに foo.bar のデータが送られてきます。

Funcの定義

  • クライアントはFuncを定義した場合、 func info (84) を送信することができます。
    • func info は必ずしも送信しなくてもよいです。 (WebUIなどでFuncの一覧に表示されなくなります)
  • また逆に他のmemberがFuncを定義したとき、サーバーからクライアントに func info (84) が送られてきます。
  • 他のMemberによってFuncが呼び出されたとき、 call (81) が送られてきます。
    • callを受け取ったクライアントは、まず指定された名前のFuncが存在するかどうかをチェックし、 call response (82) として送り返す必要があります。
    • call response でtrueを送った場合、指定された名前のFuncの処理を実行し、完了したときに結果を call result (83) として送信してください。
    • call response でfalseを送った場合は call result を送信する必要はありません

Funcの呼び出し (Call)

  • Funcを呼び出したい場合、 call (81) を送信します。
    • 呼び出したい相手のmember id とFuncの名前に加えて、 caller id を指定します。
    • caller id は実行結果が返ってくるときに判別できるよう、呼び出し側クライアントが任意に決めて良い数値(0以上の整数)です
  • callメッセージが相手memberに到達したら、 call response (82) が送られてきます。
    • 相手memberが存在しなかった場合、サーバーによって call response がfalseで送られてきます。
  • call response がtrueの場合、呼び出したFuncの処理が完了したあとに結果が call result (83) として送られてきます。
    • 処理中に相手memberが切断した場合には、サーバーが call result を生成して返します。
  • call response がfalseの場合 call result は送られてきません。