2. NEX の初期化・終了
NEX の初期化は以下の順に行ってください。
- nn::ac, nn::socket, nn::frinends (ローカル通信のみの場合は ac, socket は不要) の初期化
- NEX で使用するメモリ確保・解放関数の設定 (MemoryManager::SetBasicMemoryFunctions())
- スレッドモードの設定 (Core::SetThreadMode())
- NEX の Core オブジェクトの生成 (Initialize() 呼び出しもしくは NgsFacade, NetZ, VSocket, MatchmakeExtensionClient などの各種クライアントインスタンスの生成)
NEX の Core オブジェクトは Initialize() 呼び出しもしくは NgsFacade, NetZ, VSocket, MatchmakeExtensionClient などの各種クライアントインスタンスの生成のいずれかが最初に行われた時に生成されます。 Initialize() 呼び出しは必須ではありませんが、意図せず Core オブジェクトが生成されスレッドモードなどの設定が反映されない事を防ぐため、 Initialize(true) を呼び出すことを推奨します。
より詳細な初期化設定は 3. メモリ管理 や 4. 初期化設定(スレッドモデル、排他制御、ローカル通信、ログ出力) を参照してください。
注意
NEX では 3 つのスレッドから nn::socket の API を呼び出すことがあります。このため、NEX3.0 以降のバージョンにおいて、nn::socket::Initialize() には、maxSessions に 4 以上の値をセットし、nn::socket::GetRequiredMemorySize() で計算されたワーク用のメモリをセットしてください。 メモリサイズは 64KB * 4 本分必要です。 詳細は nn::socket::Initialize() の API リファレンスを参照してください。
NEX の終了処理は以下のように行ってください。
- NEX の Core オブジェクトの解放 (Finalize() 呼び出し及び NgsFacade, NetZ, VSocket, MatchmakeExtensionClientなどの各種クライアントインスタンスの全ての破棄)
- nn::ac, nn::socket, nn::frinends (ローカル通信のみの場合は ac, socket は不要) の終了
なお、シャットダウン/スリープ時やネットワークに繋がっていない場合、 Core::GetInstance()->SetTerminateImmediately(true)を呼び出すことで、 NetZ::Terminate()やNgsFacade::Logout()の処理が高速化され、終了処理を早くできます。 ただし、通常の切断処理が行われないため、通信相手にはキープアライブのタイムアウトが発生してこちらの端末がネットワークから突然切断されたように見える場合があります。 そのため、通常の終了シーケンスで設定することは控えてください。 また、Core::SetTerminateImmediately() 呼び出し後はサーバーと通信する API は全て失敗します。
NetZのみの終了の高速化には、NetZ::SetTerminateImmediately() を実行してください。
注意
Core::SetTerminateImmediately() は、シャットダウン/スリープ時やネットワークに繋がっていない場合に、NEX 全体を破棄するときのみに利用可能です。 Session::JoinSession()、Session::CreateSession() の呼び出しに成功してセッションに参加している場合は、Assert チェックで強制終了し、失敗します。