7.14. 応用機能 - ステーション識別トークン

ステーション識別トークンを使用することで、アプリケーションの任意のデータを使用して各ステーションを識別(区別)できます。

ステーション識別トークンの設定

セッション参加者は、参加している各ステーションに結び付けられた識別トークンデータを取得できます。この共有機能を利用する場合は、セッションのスタートアップで Session::Startup を呼び出す際の引数として渡す Session::StartupSetting を継承した構造体のメンバー pToken に自分自身を示す(自分自身のステーションと結び付ける)識別トークンを設定します。Session::Startup 以外で、自分自身を示す識別トークンを変更できません。

コード 7-32. 自分自身のステーション識別トークンの設定(インターネットマッチメイク時)
// セッションのスタートアップ時に設定します
nn::pia::session::inet::NexSessionStartupSetting startupSetting;

// 自分自身のステーションと関連付けるプレイヤー情報(ゲーム画面に表示する名前)の設定
nn::pia::transport::Station::PlayerInfo playerInfo;
nns::pia::Session_GetLocalPlayerInfo(&playerInfo);
startupSetting.playerInfo[0].Copy(&playerInfo);
  
// 自分自身を示す識別トークンの設定
nn::pia::transport::Station::IdentificationToken localToken;
// LocalTokenData は IdentificationTokenMaxDataSize [byte] の識別トークン用データ列の先頭アドレスであるとします
::std::memcpy(localToken.data, LocalTokenData, nn::pia::transport::Station::IdentificationTokenMaxDataSize);
startupSetting.pToken = &localToken;

result = nn::pia::session::Session::GetInstance()->Startup(startupSetting);
if (result.IsFailure())
{
    // エラー処理
}
 
/* セッションの構築 or 参加処理へ */

ステーション識別トークンの取得

設定した識別トークンは、セッションへの参加処理が完了した時点で各セッション参加者から取得可能な状態になります。

コード 7-33. 任意のステーションの識別トークン取得処理
// セッション参加中に実行可能です
 
nn::pia::StationId targetId; // 取得対象のステーションを示す StationId であるとします
nn::pia::transport::Station* pTargetStation = nn::pia::transport::StationManager::GetInstance()->GetStation(targetId);
if (pTargetStation != NULL)
{
    nn::pia::transport::Station::IdentificationToken tokenBuf;
    // 任意のステーションの識別トークンを取得
    result = pTargetStation->GetIdentificationToken(&tokenBuf);
    if (result.IsFailure())
    {
        // エラー処理
    }
} 
/* 取得に成功していれば tokenBuf に pTargetStation の識別トークンが格納されています */