1. はじめに

NEX は、 P2P 通信機能を実現するNEX P2Pライブラリと、マッチメイクやランキング、 NAT トラバーサル機能などのサーバー通信機能を実現するNEX サーバーサービスライブラリから構成されます。 このプログラミングマニュアルは、NEX P2P ライブラリ に含まれる「 NetZ 」について説明しています。 また、「 VSocket 」についても紹介しています。

NEX の NetZ はマルチプレイヤーゲーム開発のためのゲームネットワークエンジンです。 NetZ は開発期間、信頼性、帯域幅の有効利用、クロスプラットフォームの互換性といった、マルチプレイヤーゲーム開発へのさまざまなニーズに対応します。

NetZ の複製オブジェクト( DuplicatedObject: DO = ディーオー)のコンセプトは従来のメッセージベースのネットワークソリューションとは異なります。 DOを使用する場合は、アプリケーションで意識して端末から端末へメッセージを送る必要はなく、 ゲームオブジェクト(キャラクタや弾、敵など)がNetZによって自動的にネットワーク上のすべてのステーションへ複製されます。 1 つのステーションがオブジェクトの「 DO マスター」(コントロールするインスタンス)を持ち、 残りすべてのステーションはそれと同じオブジェクトの「 DO デュプリカ(正確なコピー)」を保持します。 マスターオブジェクトが更新されれば、その変更はすべてのデュプリカステーションにプッシュ配信されます。 データがネットワークを介して伝播するので、フォルトトレランス(障害回復機能)、 推測航法(レイテンシを考慮した補間機能)、オブジェクトマイグレーション(負荷、帯域幅の分散、権限委譲、レイテンシ管理)のような、複雑な仕様の実装が非常に容易になります。

また、従来の P2P ライブラリで一般的に利用されるリモートメソッドコール( いわゆるリモートプロシージャコール )やダイレクトストリーム( バイト列の送受信機能 )も備えています。

NEX の VSocket は NetZ より低いレイヤーに位置した、 P2P セッションの管理を行わないシンプルな パケット送受信機能を提供する Socket ライクなライブラリです。 VSocket は NAT トラバーサル機能を含む全ての NEX サーバーサービスと連携が可能で、 既存の任意の P2P ライブラリと NEX を統合するのに適したライブラリです。

別途提供されている Pia ライブラリのモジュールの一つである PiaLocal と組み合わせることで NEX P2P ライブラリの機能をローカル通信でも利用することができます。 (この用途において必要となるモジュールは PiaCommon と PiaLocal の二つです。) 詳しくは Pia ライブラリのドキュメントを参照してください。

NetZ 及び VSocket は、NEX のマッチメイク機能を利用して接続するよう設計されています。従って本ドキュメントでは NEX のマッチメイクを使用するという前提で構成されています。NEX のマッチメイク機能を使用せずに独自サーバーでマッチメイク機能を実装して NetZ もしくは VSocket を使用する企画がある場合にはお問い合わせください。

1.1. 利用する機能の選択

NEX P2P ライブラリには様々な通信方法が存在します。 通信方法の違いを元に最適な実装方法を見つけるには以下の表を参照してください。 NetZ の各通信方法は併用が可能です。

Table 1.1 NEX P2P ライブラリの通信方法
ライブラリ 通信方法 説明
NetZ 複製オブジェクトによるデータ共有 P2P セッションの管理に加え、フォルトトレランス、推測航法、オブジェクトマイグレーションなどの機能を利用したい場合に適しています。
NetZ リモートメソッドコール P2P セッションの管理に加え、送受信におけるデータのシリアライズやメッセージのディスパッチ処理をライブラリに任せたい場合に適しています。
NetZ ダイレクトストリーム P2P セッションの管理はライブラリに任せたいがデータの送受信に関する処理をアプリケーション側で行いたい場合に利用します。 DWC ( DS や Wii 向けの通信ライブラリ) から移行したい場合やアプリケーション独自のシリアライズ処理を利用したい場合、大容量のデータを転送したい場合などに適しています。
VSocket UDP Socket に似た通信 すでに他の P2P ライブラリを持っており、それと NEX を統合する場合に適しています。

1.2. 本マニュアルの概要 / 使用方法

このプログラミングマニュアルでは、NetZ アーキテクチャの使用方法と活用方法について説明します。 本書の目的は全般的な実装情報を示すとともに、必要に応じて詳細な背景情報を説明することです。 そのため、例えば推測航法など、特定の機能の使用方法を調べるには、このプログラミングマニュアルを参照してください。 反対に、特定のメソッドの構文、パラメータ、返り値、実装例などを調べる場合には API リファレンスやサンプルデモを参照してください。

このマニュアルは、ゲームのネットワークエンジンとして NetZ を使用するプログラマを対象としています。 C++ とオブジェクト指向プログラミングの経験が豊富であることを前提としています。

1.2.1. 表記法

このマニュアルでは次の表記法を使用します。

Table 1.2 このマニュアルでの表記法
表記法 説明
クラス名とメソッド名 各クラス名とメソッド名は大文字で始まります。複合されたすべての名前では、組み込まれている各語の先頭が大文字になります。
_T サンプルプログラムのコードでは、ワイドキャラクタ文字列を、文字列をNEX_T()で囲むことで(例 NEX_T(“hoge”))表現しています。