接続コールバックの適用

目次

  概要
  サーバ接続状況のメッセージを出力するためのGUIを用意する
  サーバ接続に失敗した時の処理を作る
  サーバ接続中に途中切断された時の処理を作る
  他にもいろいろな接続コールバックメソッドがあります!


概要

サーバ接続状態のコールバックを用意する

  前述までの内容で、一通りオンラインゲームとしては完成しましたが、
  最後に「接続コールバック」について触れておきます。

  オンラインゲームは、ネットワークの接続状態、サーバの稼働状況などにより、
  ゲームの維持が不可能になるケースが多々存在します。

  そういった場合でも問題なくユーザーがプレイ出来るよう、
  「今、ネットワーク上で何が起きているのか」をユーザーに通知できるような機能が必要です。

  MUN では、サーバ接続状況に応じた、いくつかのコールバックを用意しています。
  これを利用して、様々な情報通知を行なってみましょう。


サーバ接続状況のメッセージを出力するためのGUIを用意する

NetworkControlを開く

  まずは、サーバ接続状況を表示する仕組みを作ります。
  Hierarchy から、本章の最初に作成した空オブジェクト「GameObject」をクリックしてください。
  Inspector の表示から、NetworkControl をダブルクリックして、スクリプトを開きます。

サーバ接続状態を表示するためのウィンドウを用意する

  NetworkControl の 13 行目に、以下のコードを記述します。
	/** ウィンドウ表示フラグ. */
	private bool bDisplayWindow = false;

	/**
	 * ウィンドウ表示用メソッド.
	 */
	void WindowControl(int windowId)
	{
	}
  ウィンドウ表示用フラグとメソッドを用意します。

  続けて、NetworkControl の 48 行目(OnGUI() メソッド内)に、以下のコードを記述します。
		// サーバ接続状況に応じて、ウィンドウを表示する
		if(bDisplayWindow)
		{
			GUILayout.Window(0, new Rect(Screen.width / 2 - 100, Screen.height / 2 - 40, 200, 80), WindowControl, "Caution");
		}
  ウィンドウ表示フラグに応じて、ウィンドウを表示するようにします。


サーバ接続に失敗した時の処理を作る

サーバ接続失敗フラグを用意する

  NetworkControl の 16 行目に、以下のコードを記述します。
	/** サーバ接続失敗フラグ. */
	private bool bConnectFailed = false;

サーバ接続失敗コールバックの実装

  続けて、NetworkControl の 19 行目に、以下のコードを記述します。
	/**
	 * サーバ接続失敗コールバック.
	 */
	public void OnConnectToServerFailed(object parameters)
	{
		Debug.Log("OnConnectToServerFailed : StatusCode = " + parameters);
		bConnectFailed = true;
		bDisplayWindow = true;
	}
  サーバへの接続処理(MonobitNetwork.ConnectServer()メソッド)に失敗した場合、
  OnConnectToServerFailed() メソッドが自動的にコールされます。
OnConnectToServerFailed() は、MonobitEngine.MonoBehaviour に定義されているコールバックメソッドです。
  引数値の parameters には、接続失敗理由が記述されています。
  これをデバッグコンソール上に表示するようにし、先に用意した「サーバ接続失敗フラグ」と「ウィンドウ表示フラグ」を立てます。

サーバ接続失敗コールバックに処理が来た時に、GUIウィンドウ経由でユーザーに通知する

  続けて、NetworkControl の 34行目(WindowControl() メソッド内)に、以下のコードを記述します。
		// GUIスタイル設定
		GUIStyle style = new GUIStyle();
		style.alignment = TextAnchor.MiddleCenter;
		GUIStyleState stylestate = new GUIStyleState();
		stylestate.textColor = Color.white;
		style.normal = stylestate;

		// 接続失敗時の表示
		if ( bConnectFailed )
		{
			GUILayout.Label("接続に失敗しました。\n再接続しますか?", style);
			GUILayout.BeginHorizontal();
			GUILayout.FlexibleSpace();
			if (GUILayout.Button("はい", GUILayout.Width(50)))
			{
				// もう一度接続処理を実行する
				MonobitNetwork.ConnectServer("Bearpocalypse_v1.0");
				bConnectFailed = false;
				bDisplayWindow = false;
			}
			if (GUILayout.Button("いいえ", GUILayout.Width(50)))
			{
				// オフラインモードで起動する
				MonobitNetwork.offline = true;
				bConnectFailed = false;
				bDisplayWindow = false;
			}
			GUILayout.FlexibleSpace();
			GUILayout.EndHorizontal();
			return;
		}
  GUILayout 系の説明は割愛します。

  接続失敗時に再接続を促すウィンドウを表示します。
  「再接続しますか?」の問いかけに「はい」を選んだ場合、MonobitNetwork.ConnectServer() メソッドを使って再接続を試みます。
  「いいえ」を選んだ場合、オフラインモードで起動します。

  MonobitNetwork.offline は「オフラインモードでの起動処理」です。
  オフラインモードではネットワーク接続を行ないませんが、オンラインでソロプレイをするのと同じような挙動を行ないます。


サーバ接続中に途中切断された時の処理を作る

途中切断フラグを用意する

  NetworkControl の 16 行目に、以下のコードを記述します。
	/** サーバ途中切断フラグ. */
	private static bool bDisconnect = false;

途中切断コールバックの実装

  続けて、NetworkControl の 22 行目に、以下のコードを記述します。
	/**
	 * 途中切断コールバック.
	 */
	public void OnDisconnectedFromServer()
	{
		Debug.Log("OnDisconnectedFromServer");
		if( bDisconnect == false )
		{
			bDisconnect = true;
			bDisplayWindow = true;
		}
		else
		{
			bDisconnect = false;
		}
	}
  サーバ接続中、回線不良などによる途中切断した場合、あるいは MonobitNetwork.DisconnectServer() をコールした場合に、
  OnDisconnectedFromServer() メソッドが自動的にコールされます。
OnDisconnectedFromServer() は、MonobitEngine.MonoBehaviour に定義されているコールバックメソッドです。
  切断したことをデバッグコンソール上に表示するようにし、「サーバ途中切断フラグが立っていないとき」に
  「サーバ途中切断フラグ」と「ウィンドウ表示フラグ」を立てます。

  後述しますが、MonobitNetwork.DisconnectServer() をコールした時には bDisconnect にあらかじめ true を入れ
  「正常に切断したのに途中切断扱いになる」のを防ぎます。

途中切断コールバックに処理が来た時に、GUIウィンドウ経由でユーザーに通知する

  続けて、NetworkControl の 61 行目(WindowControl() メソッド内)に、以下のコードを記述します。
		// 途中切断時の表示
		if ( bDisconnect )
		{
			GUILayout.Label("途中切断しました。\n再接続しますか?", style);
			GUILayout.BeginHorizontal();
			GUILayout.FlexibleSpace();
			if (GUILayout.Button("はい", GUILayout.Width(50)))
			{
				// もう一度接続処理を実行する
				MonobitNetwork.ConnectServer("Bearpocalypse_v1.0");
				bDisconnect = false;
				bDisplayWindow = false;
			}
			if (GUILayout.Button("いいえ", GUILayout.Width(50)))
			{
				// シーンをリロードし、初期化する
				Application.LoadLevel(Application.loadedLevel);
			}
			GUILayout.FlexibleSpace();
			GUILayout.EndHorizontal();
			return;
		}
  GUILayout 系の説明は割愛します。

  途中切断時に再接続を促すウィンドウを表示します。
  「再接続しますか?」の問いかけに「はい」を選んだ場合、MonobitNetwork.ConnectServer() メソッドを使って再接続を試みます。
  「いいえ」を選んだ場合、シーンをリロードし、初期化します。

正常切断した場合に、GUIウィンドウで通知しないようにする

  NetworkControl の 150 行目(OnGUI() メソッド内)に、以下のコードを記述します。
				// 正常動作のため、bDisconnect を true にして、GUIウィンドウ表示をキャンセルする
				bDisconnect = true;


他にもいろいろな接続コールバックメソッドがあります!

接続コールバックの種類については別ページで説明します

  他にも「サーバへの接続」「ロビーの入退室」「ルームの入退室」などなど、
  MUNサーバとの接続状況を知るための様々なコールバックを用意しています。

  コールバックの詳しい説明については こちら のページでご確認ください。