• 検索結果がありません。

第 6 章 開発機能の分担と開発担当した機能

6.3 ソケット通信

6.3.3 通信処理機能の開発

バイスタンダー側のテレスカウターでの映像受信アプリのクラス構成と簡易フローチャー トを図 6-2、図 6-3に示す。

バイスタンダー側のテレスカウターでの映像受信アプリは、UIスレッドのForm1 クラス と、データの送信と受信を処理するWorkProcクラスがある。また、WorkProcからForm1 のコントロールを操作するために、PaintDalegateとSumDalegateの2つのデレゲートを 用意した。[13]

処理については、まずアプリケーション起動時にForm1がソケットサーバを起動させるス レッドを生成する。ソケットサーバスレッドはサーバソケットの初期処理を行い、クライア ン ト か ら の 通 信 接続 待 ち に なる 。 通 信 確 立後は WorkProc の 非 同 期 通 信 処 理 で あ る

StartRead を実行する。非同期通信で受信完了時に呼ばれるコールバック関数 である

OnReadComplete関数は、1画像分受信が完了した時に呼び出され、受信した画像データに

ついて、PaintDalegateを用いて、Form1の画面へ出力する。相手からの通信切断時、また は予期しない通信切断時にはOnReadComplete関数がコールバック関数として呼ばれるが、

その場合は受信データが0の時、またはSocketException、IOExceptionが発生するため、

Try-Catch で受信し、画像データ受信用の Stream を閉じる。[14]ソケットサーバスレッド

は常に接続待ち状態で待機し、相手から新しく接続要求がある場合はその都度、受信相手を 変更するため、WorkProcを生成し直し、非同期通信処理であるStartReadを実行する。ア プリケーションを終了させる場合は、ユーザが Escape キーを入力する。入力があった場合 は、ソケットサーバスレッドに対して、サーバソケットのクローズと、ループから離脱させ る必要があるが、ソケットサーバスレッドは接続要求が来るまでの間、ループ処理がブロッ クされるので、Form1のアプリケーション停止フラグをFalseからTrueにしたうえで、自 分自身に接続要求を出す。それによりブロックが解消され、ループを脱出するという流れに なる。なお、自分自身と接続したソケットは、ループから脱出する前にクローズしておく。

[13]これにより、安全に通信切断とアプリケーションの終了が可能となる。

図 6-2 バイスタンダー側のテレスカウターでの映像受信アプリのクラス構成

図 6-3 バイスタンダー側のテレスカウターでの映像受信アプリのフローチャート

次に救急隊員側の映像送受信モジュールのクラス構成を図 6-4に示す。

救急隊員側の映像送受信モジュールについて、送信クラスは SendProc クラス、受信クラ

スはRecieveProcクラスである。どちらもソケットクライアントであるため、startConnect

関数において、設定ファイルにあるサーバの IP アドレスポート番号を参照して、サーバへ の接続処理を行う。通信確立後は送信、受信用のスレッドを起動して通信確立後のソケット を用いて送信、受信を行う。送信時はSendProcのインスタンスを保持するクラスが任意の タイミングで SendProc の送信メソッドを呼び、データを送信する。受信時は RecieveProc

スレッドが受信した画像データをPaintDalegateを用いて、RecieveProcインスタンスを保 持するクラスの画面へ出力する。相手からの通信切断時について、映像受信モジュールでは、

RecieveProc中にTry-CatchでSokectException、IOExceprionの発生を確認し、通信切断 処 理 を 行 い 、 ス レ ッ ド を 閉 じ る 。 対 し て 映 像 送 信 モ ジ ュ ー ル で は 、 通 信 接 続 後 に SurveillantDisconnection 関数をスレッ ドで起 動し、Try-Catch で SokectException、

IOExceprionの発生を確認するという方法をとる。どちらのモジュールでも、通信が切断さ

れたことを通知するフラグを保持しているため、呼び出し元はタイマーイベント等でそのフ ラグの値を確認しておくことで、切断と再接続を可能とする。

なお、バイスタンダー側のPC でのHMC のカメラ映像送信アプリは、バイスタンダー側 のテレスカウターでの映像受信アプリのソケットサーバスレッドの仕組みと、救急隊員側の

映像のSendProcの送信スレッドと同じ構成で作成したあるため省略する。

図 6-4 救急隊員側の映像送受信モジュールのクラス構成

関連したドキュメント