4. 作業終了時の処理フロー
最後に、作業終了時の処理フローを示します。
4-1. 接続経路の破棄
スマートデバイスと監視端末のどちらでも構わないので「END CALL」をクリックすると、DiveceClassやMonitorClassのcloseCall()メソッドが実行されます(下図はスマートデバイスから「END CALL」した場合です)。
DiveceClassやMonitorClassのcloseCall()メソッドでは、MediaConnectionとDataConnectionをcloseします。
MediaConnectionやDataConnectionはどちらかの側からcloseされると、双方でMediaConnection.on('close', callback)イベントやDataConnection.on('close', callback)イベントが発生するため、反対側のMediaConnection.close()とDataConnection.close()も実行されて通信経路が破棄されることになります。
class BaseClass ... closeCall: -> console.log "closeCall" @emc.close() if @emc? @edc.close() if @edc? ...
4-2. シグナリングサーバとの接続とMediaStreamの破棄
最後にスマートデバイスと監視端末双方で「TERMINATE」をクリックすると、DeviceClassやMonitorClassのterminate()メソッドが起動します。
DeviceClassやMonitorClassの terminate() メソッドでは、もしまだP2P接続が確立していたら切断した後、@peer.destroy()を実行します。これにより、Peer初期化時にpeerjs-serverに登録されたユニークIDが破棄され、WebSocket接続も閉じられます。
class BaseClass ... terminate: -> console.log "terminate" @emc.close() if @emc? @edc.close() if @edc? @peer.destroy() if @peer? ...
最後にdevice.htmlやmonitor.html自体を閉じることで、initialize時に接続したMediaStreamも解放されます。
おわりに
全3回に渡り、遠隔作業支援システムの実装を題材にWebRTCとPeerJSについて解説いたしました。WebRTCを活用すれば、これまで扱うことが困難だったリアルタイムデータの送受信をブラウザ上で簡単に実現できます。これまでのWebの常識にとらわれないエキサイティングなシステムの実現に向け、本稿が一助になれば幸いです。
次回は、WebアプリケーションフレームワークShinyを使いR言語でWebアプリを作る方法について紹介します。お楽しみに!