【目次】
クライアントからサーバへ接続する
クライアントからエコー文字列を送信する
受信した文字列をサーバからを返信する
サーバから受信した文字列を表示する
クライアントがサーバから切断する
クライアントからサーバへ接続する▲
エコーの仕組みについて、プログラムレベルで解説していきましょう。
まずは、クライアントからサーバへ接続する処理から、クライアント・サーバ双方の処理内容を見てみます。
■ client/unity/Assets/MainExecute.cs - Start メソッド
クライアントの処理になります。
ここで、EchoClient.ConnectSetup メソッドを用い、あらかじめ登録された
サーバのIPアドレス、ポート番号等を使い、サーバへのコネクションを実行します。
■ server/echo_sample/src/MainExecute.cpp - Connect 関数
サーバの処理になります。
クライアントの ConnectSetup メソッドが処理している最中、
つまりは Unity のスタートボタン押下後のログ表示のタイミング)に
クライアントの接続要求に合わせて、この処理が動きます。
ここではクライアントの接続リスト peerlist に接続元のRPCID(通信用のID)を
登録し、サーバが管理するクライアントとして登録します。
クライアントからエコー文字列を送信する▲
続けて、クライアントからエコー文字列を送信する処理を見てみましょう。
■ client/unity/Assets/MainExecute.cs - Update メソッド
クライアントの処理になります。
Game画面のクリック操作(またはタッチ操作)を認識したら、EchoClient.SendServer メソッドを使い、
あらかじめ登録している文字列 m_SendString を送信します。
このとき、引数値として Dictionary を使います。
後述の説明になりますが、ここでは「イベントキー」と呼ばれるものと、実際に送信する「データ(文字列)」を
パラメータとしてセットし送信します。
受信した文字列をサーバからを返信する▲
続けて、サーバからエコー文字列を返信する処理を見てみましょう。
■ server/echo_sample/src/MainExecute.cpp - OnEvent 関数
サーバの処理になります。
クライアントから EchoCllient.SendServer を用いて送信を受けた場合、OnEvent メソッドが呼び出されます。
このとき、クライアントから送信した Dictionary 情報の「イベントキー」を第二引数に、「データ(文字列)」を第三引数に持ちます。
第一引数には Connect 関数と同じく、送信元のRPCID(通信用ID)が入ります。
ここでは、peerlist の登録分(つまりは、Connect関数により接続を受けたクライアントすべて)に対し、
等しく SendMessage 関数を実行します。
■ server/echo_sample/src/MainExecute.cpp - SendMessage 関数
上記 OnEvent 内でコールしている処理になります。
ここでクライアントから送信されてきたイベントキーを元に「サーバ側がどんな処理をするのか」を定義づけます。
今回は仮に「1番であれば、送信元のクライアントにそのまま通信内容を返す」という処理を組み込んでいます。
サーバからクライアントに送信する場合には、以下の書式で送信します。
GetInterface_Intf( <送信先RPCID> ).Send_EchoResult( <イベントキー> , <データ(文字列)> );
サーバから受信した文字列を表示する▲
続けて、サーバからエコー文字列を受信したときの処理を見てみましょう。
■ client/unity/Assets/MainExecute.cs - OnEvent メソッド
クライアントの処理になります。
サーバから GetInterface_Intf().Send_EchoResult で送信された情報は、OnEvent メソッドで受け取ります。
引数はそのまま、第一引数が「イベントキー」、第二引数が「データ(文字列)」です。
ここでもサーバから送信されてきたイベントキーを元に「クライアント側がどんな処理をするのか」を定義づけます。
今回は仮に「1番であれば、クライアントのGame画面に文字列を表示させる」という処理を組み込んでいます。
クライアントがサーバから切断する▲
最後に、クライアントがサーバから切断されたときの処理を見てみましょう。
■ server/echo_sample/src/MainExecute.cpp - Disconnect 関数
サーバの処理になります。
クライアントがログアウトしたとき、自動的にサーバ側の Disconnect 関数がコールされます。
ここでは断元のRPCID(通信用のID)を持つクライアントを
クライアントの接続リスト peerlist から削除し、サーバ内でのクライアント管理の整合性を持たせます。