複製オブジェクトの安全な参照(アクセサ)を作成します。 [詳解]
#include <NetZ/src/Core/DOCore/DORef.h>
公開メンバ関数 | |
DORef () | |
無効な参照として初期化します。 | |
DORef (DOHandle hDO) | |
複製オブジェクトハンドルを利用して初期化します。 [詳解] | |
DORef (const DORef &oRef) | |
コピーコンストラクタです。 [詳解] | |
DORef (DuplicatedObject *pDO) | |
複製オブジェクトへのポインタを指定して初期化します。 [詳解] | |
DuplicatedObject * | GetDOPtr () const |
この参照が示す複製オブジェクトのポインタを取得します。 [詳解] | |
DOHandle | GetHandle () const |
この参照が示す複製オブジェクトのハンドルを取得します。 [詳解] | |
qBool | IsHard () const |
このDORefが、複製オブジェクトへの「強い」参照であるかどうかを返します。 [詳解] | |
qBool | IsSoft () const |
このDORefが、複製オブジェクトへの「弱い」参照であるかどうかを返します。 [詳解] | |
qBool | IsValid () const |
DORefのインスタンスが有効であるかどうかを取得します。 [詳解] | |
qBool | Poll () |
DORefの参照が有効かどうかを試行します。 . [詳解] | |
void | SetHard () |
DORefを「強い」参照に設定します。 [詳解] | |
void | SetSoft () |
DORefを「弱い」参照に設定します。 [詳解] | |
qBool | Wait (qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT) |
DORefが有効になるか、タイムアウトが経過するまで待ちます。 [詳解] | |
複製オブジェクトの安全な参照(アクセサ)を作成します。
複製オブジェクトへの参照は、RefTemplate によって詳細な実装が行われます。 RefTemplate は薄いテンプレートクラスの構造になっており、 共通部分はこのDORefによって実装されます。
nn::nex::DORef::DORef | ( | DOHandle | hDO | ) |
nn::nex::DORef::DORef | ( | const DORef & | oRef | ) |
コピーコンストラクタです。
指定した参照の指す複製オブジェクトを参照して初期化します。
正しく複製オブジェクトのハンドルの参照が構築できた場合、 IsValid() がtrueを返します。
oRef | [in] 参照のコピー元を指定します。 |
nn::nex::DORef::DORef | ( | DuplicatedObject * | pDO | ) |
複製オブジェクトへのポインタを指定して初期化します。
指定された複製オブジェクトへのポインタを参照するように初期化します。
正しく複製オブジェクトのハンドルの参照が構築できた場合、 IsValid() がtrueを返します。
pDO | [in] 参照先の複製オブジェクトへのポインタを指定します。 |
DOHandle nn::nex::DORef::GetHandle | ( | ) | const |
この参照が示す複製オブジェクトのハンドルを取得します。
qBool nn::nex::DORef::IsSoft | ( | ) | const |
qBool nn::nex::DORef::IsHard | ( | ) | const |
void nn::nex::DORef::SetSoft | ( | ) |
DORefを「弱い」参照に設定します。
複製オブジェクトへの参照は、「弱い」参照と「強い」参照の2種類があります(デフォルトは「強い」参照)。 この参照は、実行時に強い参照から弱い参照に変更することもできますし、その逆もまた可能です。 強い参照は、オブジェクトが常に関連していることを保証し、DuplicatedObject::DeleteMainRefが 呼び出されない限り、ローカルステーションにて最新の状態を保ち続けます。 この参照の使い分けは、現時点ではローカルステーションに関連性の無かったオブジェクトを取ってくる際 (DuplicatedObject::FetchDuplica)によく使われます。 対照的に、弱い参照はオブジェクトの関連性に影響を及ぼさないので、デュプリカは複製スペース機能によって 関連性があると判断されたときにのみ更新されます。 強い参照と弱い参照の選択は、参照されたオブジェクトの状態を最新のものにキープしておきたいかどうかによって 決まります。
例を挙げます。仮想世界において、プレイヤーとは別世界にいるチームメイトの状態(位置、所持品など)の リストを最新の状態にキープしておきたいならば、それらのオブジェクト(デュプリカ)が常に最新の状態に 更新されるようにするため、強い参照を使うでしょう。 一方、敵キャラクターのようなケースでは、ローカルステーションで無駄に状態の更新はしないでしょうから、 おそらく弱い参照を使うでしょう。 弱い参照を使う場合は、そのオブジェクトはローカルステーションに関連が出てくるようになってから (複製スペースの条件にマッチしたら)更新の対象となります。
void nn::nex::DORef::SetHard | ( | ) |
DORefを「強い」参照に設定します。
複製オブジェクトへの参照は、「弱い」参照と「強い」参照の2種類があります(デフォルトは「強い」参照)。 この参照は、実行時に強い参照から弱い参照に変更することもできますし、その逆もまた可能です。 強い参照は、オブジェクトが常に関連していることを保証し、DuplicatedObject::DeleteMainRefが 呼び出されない限り、ローカルステーションにて最新の状態を保ち続けます。 この参照の使い分けは、現時点ではローカルステーションに関連性の無かったオブジェクトを取ってくる際 (DuplicatedObject::FetchDuplica)によく使われます。 対照的に、弱い参照はオブジェクトの関連性に影響を及ぼさないので、デュプリカは複製スペース機能によって 関連性があると判断されたときにのみ更新されます。 強い参照と弱い参照の選択は、参照されたオブジェクトの状態を最新のものにキープしておきたいかどうかによって 決まります。
例を挙げます。仮想世界において、プレイヤーとは別世界にいるチームメイトの状態(位置、所持品など)の リストを最新の状態にキープしておきたいならば、それらのオブジェクト(デュプリカ)が常に最新の状態に 更新されるようにするため、強い参照を使うでしょう。 一方、敵キャラクターのようなケースでは、ローカルステーションで無駄に状態の更新はしないでしょうから、 おそらく弱い参照を使うでしょう。 弱い参照を使う場合は、そのオブジェクトはローカルステーションに関連が出てくるようになってから (複製スペースの条件にマッチしたら)更新の対象となります。
DuplicatedObject* nn::nex::DORef::GetDOPtr | ( | ) | const |
この参照が示す複製オブジェクトのポインタを取得します。
qBool nn::nex::DORef::IsValid | ( | ) | const |
DORefのインスタンスが有効であるかどうかを取得します。
この関数は、コンストラクタにて無効なオブジェクトに対するDOHandle 、不明なオブジェクトに対する DOHandle 、異なるオブジェクトに対するDOHandle が渡されたときにfalseを返します。 失敗したときに、SYSTEMERROR_OBJDUP_DO_NOT_FOUNDか、SYSTEMERROR_GEN_INVALID_OPERATIONのエラーを シグナルすることがあります。もしもオブジェクトにへのDOHandle を明示して参照を作っていた場合、 SYSTEMERROR_OBJDUP_MISMATCHED_DOCLASSのエラーをシグナルすることもあります。
true 有効であるときに返ります。
false 無効であるかエラーが発生したときに返ります。
qBool nn::nex::DORef::Poll | ( | ) |
qBool nn::nex::DORef::Wait | ( | qUnsignedInt32 | uiTimeout = WAIT_INFINITE_TIMEOUT | ) |
DORefが有効になるか、タイムアウトが経過するまで待ちます。
uiTimeout | [in] 待ち続ける最大の時間をミリ秒単位で指定します。 デフォルトでは無限に待つ(タイムアウトを設けない)となります。 |
true 待った結果、DORefが有効になったときに返ります。
false タイムアウトが経過したときに返ります。