7.13. 応用機能 - セッションの挙動調整

セッションの挙動はアプリケーションに合わせて調整できます。

挙動設定の変更

許容される最大無通信時間など、セッション処理の挙動に関連する設定値を任意で変更できます。設定を任意の値に変更する場合は、Session::Startup の引数として渡す StartupSetting を継承した構造体のメンバーに値を設定します。変更可能な設定値は以下の通りです。

  • 通信の暗号化設定(インターネットマッチメイク、LAN マッチメイクのみ)
    ステーション間の通信を暗号化する設定です。 
  • 許容される最大無通信時間
    自分以外のステーションとの無通信時間(システム用受信もアプリ用受信も無い時間)をどれだけ許容するかの設定です。無通信時間が設定値を超えた場合、そのステーションとは切断したと判断します。フルメッシュ型ネットワークトポロジーの場合、PiaSession の無通信時間チェックによる切断検知はホスト - クライアント間だけではなくクライアント - クライアント間でも行います。
  • キープアライブの送信間隔
    キープアライブ送信(システムでもアプリでも送信処理を行っていないステーションに対して、無通信状態と判断されないように行うシステム用送信)の間隔の設定です。最終送信時刻から設定時間以上経過した場合、キープアライブ送信を行います。最終送信時刻のチェックおよびキープアライブ送信は、自分以外の各ステーション全てに対して行います。

アプリケーション側で任意の値に変更する場合、各ステーションの間で設定値が異なることは無いようにします。

StatupSetting の値を変更しないで Session::Startup を呼び出した場合、各設定にはデフォルト値が使用されます。デフォルトの設定値は以下の通りです。

  • 通信の暗号化設定:Aes128 有効
  • 最大無通信時間:インターネット通信 10 秒, ローカル通信 4 秒、LAN 通信 4 秒
  • キープアライブの送信間隔: インターネット通信 1 秒, ローカル通信 0.4 秒、LAN 通信 0.4 秒
参考:

最大無通信時間およびキープアライブ送信間隔の設定値は、アプリケーションの仕様によってはパケロス耐性に直結します。

例えば、インターネット通信のデフォルト設定の「最大無通信時間:10 秒」「キープアライブ送信間隔:1 秒」の場合ではアプリケーションが一定期間何も送信しない状態で、あるステーション間で 10 回連続してキープアライブ送信がパケロスすると、そのステーションと通信断絶したと判断します。

ただし、アプリケーションがキープアライブ送信間隔よりも短い間隔で各ステーションに対して送信する仕様だった場合、システム側がキープアライブ送信をすることはありません。

 

コード 7-31. セッション処理の挙動設定値変更(インターネットマッチメイク時)
// セッションのスタートアップ時に設定します
 
// 設定値の変更例
const u32 MaxSilenceTime = 15000; // 最大無通信時間 :15000 [msec]
const u32 KeepAliveSendingInterval = 3000; // キープアライブ送信間隔 :3000 [msec]

// 自分自身のステーションと関連付けるプレイヤー情報(ゲーム画面に表示する名前)の設定
nn::pia::transport::Station::PlayerInfo playerInfo;
nns::pia::Session_GetLocalPlayerInfo(&playerInfo);
 
// スタートアップ設定
nn::pia::inet::NexSessionStartupSetting startupSetting;
startupSetting.playerInfo[0].Copy(&playerInfo); // プレイヤー情報
startupSetting.maxSilenceTime = MaxSilenceTime; // 最大無通信時間
startupSetting.keepAliveSendingInterval = KeepAliveSendingInterval; // キープアライブ送信間隔
 
// スタートアップ
result = nn::pia::session::Session::GetInstance()->Startup(startupSetting);
if (result.IsFailure())
{
    // エラー処理
}
 
/* セッションの構築 or 参加処理へ */