7.9. 基本機能 - ホストマイグレーション

ホストマイグレーションについて説明します。

PiaSession では、ホストマイグレーション(ホストがセッションから離脱した際に残されたクライアントへ権限を委譲し、新たなホストとすることでセッションを継続する機能)を使用できます。
ホストマイグレーションを使用する場合、ホストが離脱処理を呼び出した場合、セッションに残される各クライアントはホストマイグレーションを開始し、次のホストを決定します。

ホストマイグレーションの設定

インターネットマッチメイクの場合、inet::NexSessionStartupSetting のメンバー isHostMigrationEnabled の true / false で、ホストマイグレーションの使用/不使用を変更できます。ローカルマッチメイク、LAN マッチメイクの場合はホストマイグレーションは常に有効になります。

次期ホストの選定

ホストマイグレーションでの次期ホストの選定は「単独候補」と「複数候補」の2種類の方式があります。それぞれの特徴について、以下に示します。

単独候補
  • ホストマイグレーションを行う際にはシステム側でクライアントの1人を次期ホスト候補として決定
  • ホストマイグレーション開始後に次期ホスト候補のクライアントが通信断絶した場合、クライアント全員のホストマイグレーションが失敗
複数候補
  • ホストマイグレーションを行う際にはシステム側で次期ホスト候補のランキングを作成して各クライアントの順位を決定
  • ホストマイグレーション開始後に次期ホスト候補第1位のクライアントが通信断絶しても、さらに下位の候補が新ホストとなってホストマイグレーションを継続

ローカルマッチメイクでは単独候補方式、LAN マッチメイク、インターネットマッチメイクでは複数候補方式で次期ホストが選定されます。

ホストマイグレーション使用時のみ発生する状態変化イベント

ホストマイグレーションを使用する場合、ホストマイグレーションの結果を通知するイベントが発生します。通知されるのは「ホストマイグレーションによるホストの変更」「ホストマイグレーションの失敗」です。

コード 7-17. 状態変化イベントコールバック関数の例
// 状態変化イベントコールバック関数例
void sampleSessionEventCallback(nn::pia::session::Session::EventType eventType, nn::pia::StationId id)
{
    // 引数 eventType は、発生した状態変化の内容を示す列挙型です
    // 引数 id は、状態変化が発生した対象を示す StationId です
    switch (eventType)
    {
    case nn::pia::session::Session::EventType_EventJoin:
    {
        // id が割り当てられたステーションが参加してきた場合
    }
    break;
    case nn::pia::session::Session::EventType_EventLeave:
    {
        // id が割り当てられたステーションが離脱した場合
    }
    break;
    case nn::pia::session::Session::EventType_SessionHostChanged: // ※ホストマイグレーション使用時限定イベント
    {
        // ホストマイグレーション処理によって id のステーションが新たなセッションホストとなった場合
    }
    break;
    case nn::pia::session::Session::EventType_HostMigrationFailed: // ※ホストマイグレーション使用時限定イベント
    {
        // ホストマイグレーション処理に失敗した場合
        // このイベントの場合の引数 id は StationIdInvalid になります
    }
    break;
    }
}