CTR NEX API Reference
nn::nex::HostMigrationCallback クラス

Net-Z のホストマイグレーション実行時のコールバック関数 [詳解]

#include <NetZ/src/Core/HostMigration/HostMigrationCallback.h>

+ nn::nex::HostMigrationCallback の継承関係図

公開型

typedef qBool(* UpdateSessionHostCB) (void *pMatchMakingClientClient, qUnsignedInt32 gatheringID)
 ホストマイグレーション発生時に呼び出されるコールバック関数の定義です [詳解]
 

公開メンバ関数

 HostMigrationCallback (void *pMatchMakingClientClient, UpdateSessionHostCB updateSessionHostCB, qInt32 iPriority=600)
 コンストラクタです。 [詳解]
 
virtual ~HostMigrationCallback ()
 デストラクタです。
 
qInt32 GetPriority () const
 OperationCallbackの優先度を取得します。 [詳解]
 
void Register (qUnsignedInt32 idGathering)
 ホストマイグレーションの対象を登録します [詳解]
 
qBool SessionHostIsOrphan () const
 自分が孤立したセッションホストであるかを判定します [詳解]
 
void Unregister (qUnsignedInt32 idGathering)
 ホストマイグレーションの対象から削除します [詳解]
 

詳解

Net-Z のホストマイグレーション実行時のコールバック関数

Net-Z のホストマイグレーション実行時のコールバック関数です。Net-Z のホストマイグレーションが行われると、 自動的に新しいホストがゲームサーバーに登録されます。

NetZ のホストマイグレーションは自動的に行われますが、同時に 2 人以上のプレーヤーがセッションホストであるかのように 振舞うことがあります。このような場合にゲームサーバーに間違ったホストが登録されてしまわないように、NEX では 他のステーションからの投票があった新しいホストがゲームサーバーに登録されます。

ただし、セッション内に 2人しかプレーヤーがおらず、タイムアウトなどが発生してお互いのステーションを異常状態で見失った場合は どちらがホストであるのかを投票では決定することができません。 両者がどちらも自分がホストであると認識している場合(すなわち孤立状態に陥っている場合)はセッションを終了する か、新しくマッチメイクセッションを登録することを推奨します。詳細は、 HostMigrationCallback::SessionHostIsOrphan() の API リファレンスを参照してください。

型定義メンバ詳解

typedef qBool(* nn::nex::HostMigrationCallback::UpdateSessionHostCB) (void *pMatchMakingClientClient, qUnsignedInt32 gatheringID)

ホストマイグレーション発生時に呼び出されるコールバック関数の定義です

引数
[in]pMatchMakingClientClientコンストラクタで指定した MatchmakeExtensionClient のポインタが渡されます
[in]gatheringIDRegister() で指定した GatheringID が渡されます

構築子と解体子

nn::nex::HostMigrationCallback::HostMigrationCallback ( void *  pMatchMakingClientClient,
UpdateSessionHostCB  updateSessionHostCB,
qInt32  iPriority = 600 
)

コンストラクタです。

引数
[in]pMatchMakingClientClient有効な( Bind された) MatchmakeExtensionClient
[in]updateSessionHostCBホストマイグレーション発生時に呼び出されるコールバック関数。通常 MatchMakingClient::StaticUpdateSessionHost もしくは MatchMakingClient::StaticUpdateSessionHostWithOwner を指定します。
[in]iPriority優先度。デフォルト値は 600 です。

関数詳解

void nn::nex::HostMigrationCallback::Register ( qUnsignedInt32  idGathering)

ホストマイグレーションの対象を登録します

P2P セッションの生成・参加後( Session::CreateSession 関数、Session::JoinSession 関数の非同期処理完了後) に行われる必要があります。

引数
[in]idGathering登録するギャザリングの ID
void nn::nex::HostMigrationCallback::Unregister ( qUnsignedInt32  idGathering)

ホストマイグレーションの対象から削除します

ホストマイグレーションの対象から削除します。 指定したギャザリング ID が Register() されていない場合は何も行いません。 NetZ::Terminate で終了処理をする前に実行してください。

引数
[in]idGathering削除するギャザリングの ID
qBool nn::nex::HostMigrationCallback::SessionHostIsOrphan ( ) const

自分が孤立したセッションホストであるかを判定します

自分が孤立したセッションホストであるかを判定します。孤立状態に陥いっても P2P セッションを継続することは 可能ですが、他のクライアントがこの P2P セッションに参加することはできなくなります。 この問題を避けるためには、今まで入っていたマッチメイクセッションから退出し、新しくマッチメイクセッションを 登録する必要があります。そのとき、既存の HostMigrationCallback のインスタンスを破棄し、 新しく HostMigrationCallback のインスタンスを生成して新しいマッチメイクセッションのIDを登録しなおしてください。 SessionHostIsOrphan() が true を返したときにHostMigrationCallback のインスタンスを再利用することはできません。

下記の条件を全て満たしたとき、孤立したセッションホストであると判定します。

  • ・Net-Z のセッションホストに昇格した
  • ・他の Station から自分がセッションホストであると承認されていない
  • ・最後に抜けたステーションのうち、離脱原因が正常ではなく、タイムアウトなど障害によるものがひとつでもあった( Station::LeavingOnFault)
  • ・セッション内に唯一の Station である

ChangeMasterStation が実行されたときには孤立状態に移行していないかを確認するようにしてください。 フレーム毎にポーリングしても構いません。


戻り値一覧:

true 孤立している。

false 孤立していない。

qInt32 nn::nex::OperationCallback::GetPriority ( ) const
inherited

OperationCallbackの優先度を取得します。

OperationCallbackは数値による優先順にしたがって呼び出されます。 優先度は正または負の整数で、操作に関係のあるイベントをシステムが実行する順序を決定します。 優先度0は、操作の実行のために予約されています。そのため、アプリケーション側で利用できる 優先度は-1024から-1までと、1から1024までとなります。システム側で利用する優先度はこれ以外を利用します。 詳細につきましては、OperationManager を参照して下さい。

戻り値
このOperationCallbackの優先度が返ります。