7.8. 基本機能 - セッション離脱

セッションから離脱する処理について説明します。

セッションからの離脱

セッション離脱処理は非同期処理です。 LeaveSessionAsync() を呼び出すことで非同期処理が開始され、 IsLeaveSessionCompleted() によって非同期処理の終了を検知できます。離脱処理に成功すると GetLeaveSessionResult() は IsSuccess() が真となる Result 値を返します。

ホストもクライアントも呼び出す API は同じです。

ホストマイグレーションを使用していない場合にホストがセッションから離脱する際には、そのセッションに参加している全クライアントにセッション破棄通知を送信し、受け取ったクライアントは切断状態へ移行します。

コード 7-16. セッションからの離脱
// セッションからの離脱処理(非同期処理の開始)
result = nn::pia::session::Session::GetInstance()->LeaveSessionAsync();
if (result.IsFailure())
{
    // エラー処理
}
 
// 非同期処理の開始に成功した場合、ディスパッチ関数を定期的に呼び出して非同期処理の進行を待つ必要があります
while (nn::pia::session::Session::GetInstance()->IsLeaveSessionCompleted() == false)
{
    if (networkType == Internet)
    {
        // インターネット通信の場合、サーバーとのキープアライブ通信などのために NEX の Scheduler::Dispatch を呼ぶ必要があります
        nn::nex::Scheduler::GetInstance()->DispatchAll();
    }
    nn::pia::common::Scheduler::GetInstance()->Dispatch();
}
 
// 非同期処理の結果確認(非同期処理の開始に成功していれば、常に成功します)
result = nn::pia::session::Session::GetInstance()->GetLeaveSessionResult();
PIA_SAMPLE_ASSERT(result.IsSuccess());