PiaLan を利用する場合の手順や注意点を説明します。
Pia のモジュールの初期化を 1.4. セットアップの順序 ページの「モジュールの初期化処理/終了処理の順序」の順で行います。
PiaLan を使用する場合は、以下の処理が必要になります。
PiaSession のスタートアップより前に処理を完了する必要があります。
PiaSession のクリーンアップ後、再度 PiaSession のスタートアップからセッション処理を行えます。
再スタートアップせずに終了する場合は最初に PiaLan に登録したローカル IP アドレスの設定解除を行います。
次に Pia のモジュールを初期化した順序と逆の順序で終了処理を行います。
PiaLan モジュールの初期化(lan::Initialize)を行います。
同じルータ下に存在する端末間でマッチメイクを行う LanFacade クラスのシングルトンを生成します。PiaLan の初期化が完了したら、PiaTransport に nn::pia::lan::LanNetworkFactory を渡して初期化します。PiaTransport の初期化については 6. PiaTransport 編を参照してください。
/*
PiaCommon の初期化を済ませておきます */ // PiaLan を初期化します result = nn::pia::lan::Initialize(); PIA_ASSERT(result.IsSuccess()); // PiaLan で必要なシングルトンの生成を開始します result = nn::pia::lan::BeginSetup(); PIA_ASSERT(result.IsSuccess()); // LanFacade のシングルトンを生成します result = nn::pia::lan::LanFacade::CreateInstance(); PIA_ASSERT(result.IsSuccess()); // PiaLan で必要なシングルトンの生成を終了します result = nn::pia::lan::EndSetup(); PIA_ASSERT(result.IsSuccess()); /* nn::pia::transport::Transport::Setting.pFactory に nn::pia::lan::LanNetworkFactory のポインタを指定して PiaTransport の初期化を行います。その後、PiaSession の初期化を行います。 */ |
CTR-SDK の AC ライブラリ、ソケットライブラリを使用してネットワークインターフェースを起動します。
ネットワークインターフェースの起動に成功したら、 ローカルの IP アドレスを取得して、LanFacade に登録します。
int32_t ret;
nn::socket::InAddr addr1; nn::socket::InAddr addr2; ret = nn::socket::GetPrimaryAddress(reinterpret_cast<uint8_t*>(&addr1), reinterpret_cast<uint8_t*>(&addr2)); PIA_SAMPLE_ASSERT(ret == 0); nn::pia::lan::LanFacade::LanNetworkSetting setting; setting.localAddress = nn::pia::common::ByteOrder::NetworkToHost32(addr1.addr); setting.subnetmask = nn::pia::common::ByteOrder::NetworkToHost32(addr2.addr); setting.localCommunicationVersion = 0; nn::pia::Result result = nn::pia::lan::LanFacade::GetInstance()->Bind(setting); if (result.IsFailure()) { // アドレスが取得できず、値がゼロの場合はエラーになります } |
ローカルの IP アドレスを LanFacade に登録したら以降は PiaSession の API を呼び出すことでセッションの構築/参加処理を行います。詳しくは 7.4. 基本機能 - ブラウズマッチメイク、7.5. 基本機能 - ランダムマッチメイクを参照してください。
session::Session のセッション構築/参加を行う非同期処理中に LAN セッションを開始します。また、セッション破棄/離脱を行う非同期処理中に LAN セッションを終了します。
セッション参加処理の詳細については、プログラミングマニュアル 7.4. 基本機能 - ブラウズマッチメイク、7.5. 基本機能 - ランダムマッチメイク を参照してください。
LanFacade::LanNetworkSetting 構造体の localCommunicationVersion で通信バージョンを設定できます。異なるバージョン間では通信を行うことができません。セッションに参加する際にバージョン不一致を検出した場合、参加失敗となり、自身と相手のバージョン比較結果により、ResultLanLowerVersion, ResultLanHigherVersion のいずれかが返ります。ResultLanLowerVersion が返る場合、本体機能による更新が必要です。
LAN セッション中(セッションスタートアップからクリーンアップまでの間)は、Pia のディスパッチ関数(pia::common::Scheduler)を呼び出す必要があります。(Pia のディスパッチについては、6. PiaTransport 編 を参照してください。)
PiaSession のクリーンアップ処理後から PiaSession の終了処理までの間に LanFacade::Unbind() を呼び出して登録したアドレスの設定を解除します。
NEX ゲームサーバーを使用してセッションを確立する場合との変更点を以下にまとめます。