4.4. デバッグ支援 - ダミーセッション機能

概要

PiaInet には、ダミーセッション機能が用意されています。PiaSession のセッション機能では複数のセッションを扱うことができませんが、ダミーセッション機能では複数のセッションを構築、破棄、設定更新を行うことができます。セッション数よりも少ない端末数でセッションの検索処理のデバッグを行えるように支援する機能です。

ダミーセッション機能の有効化

アプリケーションは PiaInet の初期化処理時に inet::NexDebugSession::CreateInstance() を呼び出します。

注意:

inet::NexDebugSession::CreateInstance() を製品版 ROM で呼び出してはいけません。

コード 4-7. ダミーセッション機能の有効化
nn::pia::Result result;

// PiaInet の初期化処理開始

result = nn::pia::inet::Initialize();
PIA_SAMPLE_ASSERT_RESULT_IS_SUCCESS(result);

result = nn::pia::inet::BeginSetup();
PIA_SAMPLE_ASSERT_RESULT_IS_SUCCESS(result);

// NexFacade のシングルトン生成
result = nn::pia::inet::NexFacade::CreateInstance();
PIA_SAMPLE_ASSERT_RESULT_IS_SUCCESS(result);

// NexDebugSession のシングルトン生成
result = nn::pia::inet::NexDebugSession::CreateInstance();
PIA_SAMPLE_ASSERT_RESULT_IS_SUCCESS(result);

result = nn::pia::inet::EndSetup();
PIA_SAMPLE_ASSERT_RESULT_IS_SUCCESS(result);

// PiaInet の初期化処理終了

ダミーセッション機能の使用開始

ダミーセッション機能を使用するためには、通常のインターネット通信時と同様にインターネットへの接続処理と NEX ゲームサーバーへのログインが必要です。詳細は 4.1. PiaInet 基本機能 を参照ください。

NEX ゲームサーバーへのログインに成功したら、inet::NexDebugSession::Startup() を呼び出します。

ダミーセッションの構築

ダミーセッションの構築は通常のセッション構築と同様に inet::NexCreateSessionSetting で構築するセッションの設定を行います。

設定した inet::NexCreateSessionSetting を inet::NexDebugSession::CreateDummySessionAsync() に指定し、ダミーセッション構築の非同期処理を開始します。
非同期処理は common::Scheduler::Dispatch() と NEX のディスパッチ API を呼び出すことで進行し、inet::NexDebugSession::IsCreateDummySessionCompleted() で終了を検知できます。
ダミーセッションの構築に成功すると、inet::NexDebugSession::GetCreateDummySessionResult() は isSuccess() が真となる Result 値を返します。また、構築に成功したダミーセッションのセッション ID は inet::NexDebugSession::GetCreatedDummySessionId() で取得できます。

コード 4-8. ダミーセッションの構築
// 作成するセッションの設定
nn::pia::inet::NexCreateSessionSetting createSessionSetting;
createSessionSetting.SetGameMode(SessionGameMode); // ゲームモード
createSessionSetting.SetMaxParticipantNum(MaxEntry); // 最大参加人数
createSessionSetting.SetAttribute(SessionAttributeIndex, SessionAttributeValue); // セッションの属性値
createSessionSetting.SetOpenSession(true); // 作成されてすぐに参加可能状態にします。
createSessionSetting.SetSessionType(nn::pia::inet::SessionType_Anybody); // 誰でも参加可能なセッションタイプに設定
createSessionSetting.SetSessionMatchmakeKeyword(MatchmakeKeywordString); // あいことば

// アプリケーション定義データを設定できます
for (uint32_t i = 0; i < ApplicationDataBufferSize; i++)
{
    g_applicationDataBuffer[i] = i;
}
createSessionSetting.SetApplicationData(g_applicationDataBuffer, sizeof(g_applicationDataBuffer));

// ダミーセッションの構築処理(非同期処理の開始)
result = nn::pia::inet::NexDebugSession::GetInstance()->CreateDummySessionAsync(&createSessionSetting);
if (result.IsFailure())
{
    // エラー処理
}

// 非同期処理の開始に成功した場合、ディスパッチ関数を定期的に呼び出して非同期処理の進行を待つ必要があります
while (nn::pia::inet::NexDebugSession::GetInstance()->IsCreateDummySessionCompleted() == false)
{
    // Pia, NEX の Scheduler::Dispatch を呼びます
    nn::pia::common::Scheduler::GetInstance()->Dispatch();
    nn::nex::Scheduler::GetInstance()->DispatchAll();
}

// 非同期処理の結果を確認
result = nn::pia::inet::NexDebugSession::GetInstance()->GetCreateDummySessionResult();
if (result.IsFailure())
{
    // エラー処理
}

// 構築したダミーセッションのセッション ID を取得
uint32_t sessionIdOfCreatedDummySession = nn::pia::inet::NexDebugSession::GetInstance()->GetCreatedDummySessionId());

// 構築に成功したダミーセッションは PiaSession で検索できますが参加できません。

ダミーセッションの破棄

構築したダミーセッションを破棄できます。破棄する際は破棄したいダミーセッションのセッション ID を inet::NexDebugSession::DestroyDummySessionAsync() に指定し、ダミーセッション破棄の非同期処理を開始します。
非同期処理は common::Scheduler::Dispatch() と NEX のディスパッチ API を呼び出すことで進行し、inet::NexDebugSession::IsDestroyDummySessionCompleted() で終了を検知できます。
ダミーセッションの破棄に成功すると、inet::NexDebugSession::GetDestroyDummySessionResult() は isSuccess() が真となる Result 値を返します。

コード 4-9. ダミーセッションの破棄
// 破棄したいダミーセッションの SessionId を取得
uint32_t targetSessionId = GetDestroyTargetSessionId(CreatedDummySessionIds);

// ダミーセッションの破棄処理(非同期処理の開始)
result = nn::pia::inet::NexDebugSession::GetInstance()->DestroyDummySessionAsync(targetSessionId);
if (result.IsFailure())
{
    // エラー処理
}

// 非同期処理の開始に成功した場合、ディスパッチ関数を定期的に呼び出して非同期処理の進行を待つ必要があります
while (nn::pia::inet::NexDebugSession::GetInstance()->IsDestroyDummySessionCompleted() == false)
{
    // Pia、NEX の Scheduler::Dispatch を呼びます
    nn::pia::common::Scheduler::GetInstance()->Dispatch();
    nn::nex::Scheduler::GetInstance()->DispatchAll();
}

// 非同期処理の結果を確認
result = nn::pia::inet::NexDebugSession::GetInstance()->GetDestroyDummySessionResult();
if (result.IsFailure())
{
    // エラー処理
}

ダミーセッションの設定更新

構築したダミーセッションの設定更新も行えます。設定更新する際は通常のセッション設定更新と同様に inet::NexUpdateSessionSetting で更新設定を行います。

設定更新したいダミーセッションのセッション ID と設定した inet::NexUpdateSessionSetting を inet::NexDebugSession::UpdateDummySessionAsync() に指定し、ダミーセッションの設定更新の非同期処理を開始します。
非同期処理は common::Scheduler::Dispatch() と NEX のディスパッチ API を呼び出すことで進行し、inet::NexDebugSession::IsUpdateDummySessionCompleted() で終了を検知できます。
ダミーセッションの設定更新に成功すると、inet::NexDebugSession::GetUpdateDummySessionResult() は isSuccess() が真となる Result 値を返します。

コード 4-10. ダミーセッションの設定更新
// 更新したいダミーセッションの SessionId を取得
uint32_t targetSessionId = GetUpdateTargetSessionId(CreatedDummySessionIds);

// 更新設定
nn::pia::inet::NexUpdateSessionSetting updateSessionSetting;
updateSessionSetting.SetMaxParticipantNum(6); // 最大参加人数
uint8_t appData[4] = { 0xDE, 0xAD, 0xBE, 0xEF };
updateSessionSetting.SetApplicationData(appData, sizeof(appData)); // アプリケーション定義データ
uint32_t attributes[6] = { 0xf, 0xe, 0xe, 0xd, 0xb, 0xa };
updateSessionSetting.SetAttributes(attributes); // 属性

// ダミーセッションの設定更新処理(非同期処理の開始)
result = nn::pia::inet::NexDebugSession::GetInstance()->UpdateDummySessionAsync(targetSessionId, updateSessionSetting);
if (result.IsFailure())
{
    // エラー処理
}

// 非同期処理の開始に成功した場合、ディスパッチ関数を定期的に呼び出して非同期処理の進行を待つ必要があります
while (nn::pia::inet::NexDebugSession::GetInstance()->IsUpdateDummySessionCompleted() == false)
{
    // Pia、NEX の Scheduler::Dispatch を呼びます
    nn::pia::common::Scheduler::GetInstance()->Dispatch();
    nn::nex::Scheduler::GetInstance()->DispatchAll();
}

// 非同期処理の結果を確認
result = nn::pia::inet::NexDebugSession::GetInstance()->GetUpdateDummySessionResult();
if (result.IsFailure())
{
    // エラー処理
}

ダミーセッション機能の使用終了

ダミーセッション機能の使用を止める際は、構築したダミーセッションの破棄を行ってから、inet::NexDebugSession::Cleanup を呼び出します。

NexDebugSession のクリーンアップ後、NEXゲームサーバーからのログアウト、インターネット接続の切断を行います。