CTR NEX API Reference
nn::nex::PromotionReferee クラス

ステーションに障害が発生した後、フォールトトレラントなオブジェクトをどのステーションにマイグレーション させるかを制御するクラスです。 [詳解]

#include <NetZ/src/Core/DOCore/PromotionReferee.h>

+ nn::nex::PromotionReferee の継承関係図

公開型

typedef void(* ComputeAffinityCallback) (DOHandle hObject, qByte *pbyAffinity, TimeInterval *ptiWaitTime)
 ComputeAffinityCallbackのtypedefです。 [詳解]
 
typedef RefTemplate< DuplicatedObjectRef
 複製オブジェクトへの安全な参照を行うためのtypdef
 
typedef SelectionIteratorTemplate< DuplicatedObjectSelectionIterator
 複製オブジェクトを列挙するためのイテレータのtypedef
 
typedef qByte(* ValidateAffinityCallback) (DOHandle hObject, DOHandle hCalleeStation, qByte byAffinity)
 ValidateAffinityCallbackのtypedefです。 [詳解]
 

公開メンバ関数

virtual qBool ApproveEmigration (qUnsignedInt32 uiReason)
 複製オブジェクトがマイグレーションを行うかどうかを返します。 [詳解]
 
virtual qBool ApproveFaultRecovery ()
 複製オブジェクトに障害回復機能をつけるかどうかを返します。 [詳解]
 
qBool AttemptEmigration (DOHandle hNewLocation)
 この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。 [詳解]
 
virtual qReal ComputeDistance (DuplicatedObject *pOtherObject)
 推測航法において、距離ベースの推定エラーを計算する際の距離計算を行います。 [詳解]
 
qBool CreateDuplica (DOHandle hNewDuplicaStation)
 この複製オブジェクトのデュプリカを作成します。 [詳解]
 
qBool DeleteMainRef ()
 複製オブジェクトの主参照を削除するように指示します。 [詳解]
 
qBool Emigrate (MigrationContext *pContext, DOHandle hTargetStation)
 この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。 [詳解]
 
const qCharGetClassNameString () const
 複製オブジェクトのクラス名を文字列として取得します。 [詳解]
 
const qCharGetDatasetNameString (qByte byDatasetIndex) const
 この複製オブジェクトに関連付けられているデータセットの名称を取得します。 [詳解]
 
DOClassID GetDOClassID () const
 この複製オブジェクトの複製オブジェクトクラスIDを取得します。 [詳解]
 
DOHandle GetHandle () const
 この複製オブジェクトの複製オブジェクトハンドルを取得します。 [詳解]
 
qUnsignedInt32 GetHandleValue () const
 この複製オブジェクトのインスタンスを表すqUnsignedInt32 型の値を取得します。 [詳解]
 
StationID GetMasterID () const
 この複製オブジェクトのマスターのステーションのStationIDを取得します。 [詳解]
 
DOHandle GetMasterStation () const
 この複製オブジェクトの複製マスターとなっているStation オブジェクトの複製オブジェクトハンドルを取得します。 [詳解]
 
qBool HasAuthority () const
 この複製オブジェクトが権限を持っているかどうかを取得します。 [詳解]
 
virtual void InitDO ()
 複製オブジェクトが初期化されたときにシステム側から呼び出されます。 [詳解]
 
qBool IsA (DOClassID idDOCID) const
 この複製オブジェクトインスタンスが指定された複製オブジェクトクラスのインスタンスであるかを調べます。 [詳解]
 
virtual qBool IsACoreDO () const
 この複製オブジェクトがCoreDOであるかどうかを取得します。 [詳解]
 
qBool IsADuplica () const
 この複製オブジェクトがデュプリカであるか、そうでないかを取得します。 [詳解]
 
qBool IsADuplicationMaster () const
 この複製オブジェクトが複製マスターであるか、そうでないかを取得します。 [詳解]
 
qBool IsAKindOf (DOClassID idDOCID) const
 この複製オブジェクトインスタンスが指定された複製オブジェクトクラス、またはその派生関係であるかどうかを調べます。 [詳解]
 
qBool IsAUserDO () const
 この複製オブジェクトがUserDOであるかどうかを取得します。 [詳解]
 
qBool IsAWellKnownDO () const
 この複製オブジェクトが既知オブジェクトクラスのインスタンスであるかどうかを取得します。 [詳解]
 
qBool IsGlobal () const
 このインスタンスがグローバル複製オブジェクトであるかどうかを取得します。 [詳解]
 
qBool IsPublished () const
 この関数が発行されたかどうかを取得します。 [詳解]
 
qBool MainRefIsDeleted () const
 DeleteMainRef 関数がこのオブジェクトに対して呼び出されたかどうかを取得します。 [詳解]
 
qBool MigrationInProgress () const
 この複製オブジェクトがマイグレーションを行っている最中かどうかを取得します。 [詳解]
 
virtual void OperationBegin (DOOperation *pOperation)
 複製オブジェクトシステム操作が開始されるたびに呼び出されます。 [詳解]
 
virtual void OperationEnd (DOOperation *pOperation)
 複製オブジェクトシステム操作が終了されるたびに呼び出されます。 [詳解]
 
qBool Publish (qUnsignedInt32 uiTimeout=DEFAULT_PUBLISH_TIMEOUT)
 この複製オブジェクトのインスタンスをセッションにいるステーションに発行します。 [詳解]
 
qBool Refresh ()
 デュプリカのデータセットの情報をバッファから転送します。 [詳解]
 
qBool Refresh (const Time &tRefreshTime)
 デュプリカのデータセットの情報をバッファから転送します。 [詳解]
 
qBool Refresh (DataSet &refDataset)
 デュプリカのデータセットの情報をバッファから転送します。 [詳解]
 
qBool Refresh (DataSet &refDataset, const Time &tRefreshTime)
 デュプリカのデータセットの情報をバッファから転送します。 [詳解]
 
virtual void Trace (qUnsignedInt64 uiTraceFlag=TRACE_ALWAYS) const
 この複製オブジェクトの状態をトレースします(デバッグ用)。 [詳解]
 
qResult Update ()
 すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解]
 
qResult Update (const Time &tUpdateTime)
 すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解]
 
qResult Update (DataSet &refDataset)
 指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解]
 
qResult Update (DataSet &refDataset, const Time &tUpdateTime)
 指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。 [詳解]
 

静的公開メンバ関数

static DuplicatedObjectCreate (qUnsignedInt32 uiTimeout==DEFAULT_CREATE_TIMEOUT)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (DOID idUserDefinedID)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (DOClassID idDOClass, qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (DOClassID idDOClass, DOID idUserDefinedID)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreate (const DOHandle &dohHandle)
 複製オブジェクトのローカルインスタンスを作成します。 [詳解]
 
static DuplicatedObjectCreateWellKnown (WKHandle &hWK)
 指定された既知オブジェクトを作成します。 [詳解]
 
static DuplicatedObjectDynamicCast (DuplicatedObject *pDO)
 複製オブジェクトへのポインタの動的キャストを行います。 [詳解]
 
static qBool FetchDuplica (FetchContext *pContext, DOHandle hFetchedObject)
 複製オブジェクトのデュプリカを取ってきます。 [詳解]
 
static DOOperationGetCurrentOperation ()
 現在実行している最中の、複製オブジェクトに対する操作オブジェクトへのポインタを取得します。 [詳解]
 
static OperationManagerGetOperationManager ()
 OperationManager へのポインタを取得します。 [詳解]
 
static void RegisterAffinityCallback (ComputeAffinityCallback pfComputeAffinity)
 ステーションの類似度レベルを通知するコールバックを登録します。 [詳解]
 
static void RegisterAffinityValidationCallback (ValidateAffinityCallback pfValidateAffinity)
 ステーションの類似度レベルを検証するコールバックを登録します。 [詳解]
 

静的公開変数類

static const qUnsignedInt32 DEFAULT_CREATE_TIMEOUT = 1000
 DuplicatedObject::Create で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。 [詳解]
 
static const qUnsignedInt32 DEFAULT_PUBLISH_TIMEOUT = 1000
 DuplicatedObject::Publish で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。 [詳解]
 

詳解

ステーションに障害が発生した後、フォールトトレラントなオブジェクトをどのステーションにマイグレーション させるかを制御するクラスです。

本クラスは、複製オブジェクトが存在していたステーションに障害が発生した後、どのステーションに複製オブジェクトを マイグレーションさせるかを制御します。PromotionRefereeは、類似度レベルに応じて、どのステーションが新しい 複製マスターになるべきかを決定します。フォールトトレラントな複製マスターが存在していたステーションが、 障害によってセッションを離脱したとき、この複製マスターに対応するデュプリカを擁する各ステーションは ComputeAffinityCallbackを通してPromotionRefereeを呼び出し、このオブジェクトにおける類似レベルとステーションの 待ち時間を明示し、どのステーションが新たな複製マスターとなるかを決定します。 デフォルトでは、最大の類似度レベルを持つステーションが新たな複製マスターとなります。各プロセスにおける デフォルトの類似度レベルは、サーバープロセスが100、クライアントプロセスが50、ツールプロセスは0となります。 また、セッションマスターはボーナスとして10ポイントが加算され、デフォルトで未知のプロセスはクライアントプロセスと 見なされます。 よって、オブジェクトのマイグレーション先としては、クライアントプロセスやツールプロセスよりも、サーバープロセスが 優先されるようになります。 もし同一の類似度レベルを持つ複数のプロセスがPromotionRefereeを呼び出した場合は、最初にPromotionRefereeを呼び出した ステーションが新たな複製マスターとして選出されます。 PromotionRefereeが実行している決定プロセスの詳細については、ComputeAffinityCallbackを参照してください。

型定義メンバ詳解

typedef void(* nn::nex::PromotionReferee::ComputeAffinityCallback) (DOHandle hObject, qByte *pbyAffinity, TimeInterval *ptiWaitTime)

ComputeAffinityCallbackのtypedefです。

デフォルトの類似度レベルは、サーバープロセスが100、クライアントプロセスが50、ツールプロセスは0となります。 また、セッションマスターはボーナスとして10ポイントが加算され、デフォルトで未知のプロセスはクライアントプロセスと 見なされます。 よって、オブジェクトのマイグレーション先としては、クライアントプロセスやツールプロセスよりも、サーバープロセスが 優先されるようになります。 もし同一の類似度レベルを持つ複数のプロセスがPromotionRefereeを呼び出した場合は、最初にPromotionRefereeを呼び出した ステーションが新たな複製マスターとして選出されます。

ウェイトタイムはPromotionRefereeを待たせることで、与えられたステーションが新複製マスターであると宣言するまでの時間を 引き延ばします。これは、より高い類似度レベルを持っていた他のステーションが、障害への応答に遅れてしまったケースに 備えてのものです。

デフォルトの ptiWaitTimeは、ツールプロセスなら1000ミリ秒(オブジェクトの制御は、ツールプロセス以外に任せたいという強い意図のため)、 クライアントプロセスならば500ミリ秒、そしてサーバープロセスならば0ミリ秒となっています。 よって、サーバープロセスがPromotionRefereeに孤児オブジェクトの面倒を見ることを通知すれば、この関数呼び出しは返ります。

障害発生後、PromotionRefereeが最初のマイグレーション要求をステーションから受け取った時、そのステーションは 新たな複製マスターとして「ベストな選択」であるとマークされ、PromotionRefereeは、より高い類似度レベルのステーションからの リクエストに備えて、wait timeだけ待ちます。何もリクエストがなかった場合は、このステーションが新たな複製マスターとして 承認され、オブジェクトのマイグレーションが進行します。一方、より高い類似度レベルのリクエストを受け取った場合は、 そのステーションが「ベストな選択」であるとマークされ、そのステーションが新たな複製マスターであると承認されるまで、 PromotionRefereeはそのステーションのwait timeだけ待ちます。このプロセスはwait time期限切れまで続行され、その結果、 PromotionRefereeは最終の決定を下し、それ以降のリクエストは全て無視します。いったんPromotionRefereeが新たな 複製マスターのステーションを決定したら、新しいマスターステーションへのマイグレーションが試みられます。

注意:このメソッドは、既知オブジェクトではないユーザーDOに適用されます。

引数
[in]hObject複製マスターのステーションに障害が発生したローカルのデュプリカへのDOHandle
[in]pbyAffinityComputeAffinityCallbackによって作成される、ステーションの類似度レベル
[in]ptiWaitTimePromotionRefereeが新たな複製マスターを宣誓するまでに待つことになる時間。単位はミリ秒。
参照
RegisterAffinityCallback
typedef qByte(* nn::nex::PromotionReferee::ValidateAffinityCallback) (DOHandle hObject, DOHandle hCalleeStation, qByte byAffinity)

ValidateAffinityCallbackのtypedefです。

デフォルトの類似度レベルは、サーバープロセスが100、クライアントプロセスが50、ツールプロセスは0となります。 また、セッションマスターはボーナスとして10ポイントが加算され、デフォルトで未知のプロセスはクライアントプロセスと 見なされます。 よって、オブジェクトのマイグレーション先としては、クライアントプロセスやツールプロセスよりも、サーバープロセスが 優先されるようになります。 もし同タイプの複数のプロセスがPromotionRefereeを呼び出した場合は、最初にPromotionRefereeを呼び出した ステーションが新たな複製マスターとして選出されます。

注意:このメソッドは、既知オブジェクトではないユーザーDOに適用されます。

引数
[in]hObject複製マスターのステーションに障害が発生したローカルのデュプリカへのDOHandle
[in]hCalleeStationコールバックが呼び出されるステーションのDOHandle
[in]byAffinityhCalleeStationの類似度レベル。呼び出されたステーション側で定義されます。
参照
RegisterAffinityValidationCallback

関数詳解

static void nn::nex::PromotionReferee::RegisterAffinityCallback ( ComputeAffinityCallback  pfComputeAffinity)
static

ステーションの類似度レベルを通知するコールバックを登録します。

このメソッドは、与えられたステーションのPromotionRefereeで呼び出されます。次に示すのは、 孤児オブジェクトの複製マスターが(事実上、常に)サーバープロセスに割り当てられる ComputeAffinityCallback の実装例です。 この例では、特定のサーバーが全てのオブジェクトを引き受けてしまい、処理負荷が集中してパンクしてしまう 危険を避けるために、オブジェクトは与えられたサーバープロセスにランダムに割り当てられます。 処理負荷を分散するためには、もちろんロードバランシングをサーバークラスタに実装することもできます。 非サーバープロセスは、サーバープロセスが存在しないときにのみ、孤児オブジェクトの制御を引き受けます。

引数
[in]pfComputeAffinityPromotionRefereeにステーションの類似度レベルを通知する ComputeAffinityCallback コールバックへのポインタ。
参照
RegisterAffinityValidationCallback
static void nn::nex::PromotionReferee::RegisterAffinityValidationCallback ( ValidateAffinityCallback  pfValidateAffinity)
static

ステーションの類似度レベルを検証するコールバックを登録します。

このメソッドは、与えられたステーションのPromotionRefereeによって呼び出されます。 以下に示すのは、ValidateAffinityCallback の例です。 この例の場合は、サーバープロセスは1から101までの類似度レベルを持ち、 クライアントプロセスは類似度レベル0であるという条件下において、 ステーションが主張する類似度レベルが有効であるかどうかを検証しています。

引数
[in]pfValidateAffinityステーションの類似度レベルを有効にする ValidateAffinityCallback コールバック関数へのポインタ。
参照
RegisterAffinityCallback
DOHandle nn::nex::DuplicatedObject::GetHandle ( ) const
inherited

この複製オブジェクトの複製オブジェクトハンドルを取得します。

戻り値
複製オブジェクトハンドルが返ります。
戻り値一覧:
INVALID_DOHANDLE エラーが発生したときに返ります。このとき、SYSTEMERROR_GEN_INVALID_OPERATION_WARNINGエラーがシグナルされます。
参照
GetHandleValue
qUnsignedInt32 nn::nex::DuplicatedObject::GetHandleValue ( ) const
inherited

この複製オブジェクトのインスタンスを表すqUnsignedInt32 型の値を取得します。

戻り値
この複製オブジェクトのインスタンスを表すqUnsignedInt32 型の値が返ります。
戻り値一覧:
INVALID_DOHANDLE エラーが発生したときに返ります。このとき、SYSTEMERROR_GEN_INVALID_OPERATION_WARNING エラーがシグナルされます。
参照
GetHandle
qBool nn::nex::DuplicatedObject::IsGlobal ( ) const
inherited

このインスタンスがグローバル複製オブジェクトであるかどうかを取得します。

グローバル複製オブジェクトとは、既知オブジェクトであるか、あるいは DDL(データ定義言語)にて、globaldoプロパティが設定された複製オブジェクトです (DDLの文法についての詳細はNEXプログラミングマニュアルを参照してください)。 これらのオブジェクトはセッション中で全体的にアクセスでき、 セッションに参加中のすべてのステーション(参加者)に対して複製されていることが保証されています。


戻り値一覧:

true グローバル複製オブジェクトのインスタンスである場合に返ります。

false グローバル複製オブジェクトのインスタンスであに場合に返ります。

参照
IsAWellKnownDO, IsACoreDO, IsAUserDO
const qChar* nn::nex::DuplicatedObject::GetClassNameString ( ) const
inherited

複製オブジェクトのクラス名を文字列として取得します。

この関数をトレースに利用することでデバッグに役立てることが出来ます。

戻り値
この複製オブジェクトクラス名を表す文字列へのポインタが返ります。
const qChar* nn::nex::DuplicatedObject::GetDatasetNameString ( qByte  byDatasetIndex) const
inherited

この複製オブジェクトに関連付けられているデータセットの名称を取得します。

この関数はトレースを行う際に便利に利用することが出来ます。 byDatasetIndexで指定しなければならないインデックス番号は、 DDLファイルに宣言された順番に割り当てられていきます。 この番号は1から始まる正の整数となります。

引数
[in]byDatasetIndexデータセットのインデックス番号を指定します。
戻り値
この複製オブジェクトに関連付けられているデータセットのうち、 byDatasetIndexに対応するインデックス番号のデータセットの名称文字列へのポインタが返ります。
DOClassID nn::nex::DuplicatedObject::GetDOClassID ( ) const
inherited

この複製オブジェクトの複製オブジェクトクラスIDを取得します。

複製オブジェクトクラスIDとは、DOClassID として定義される、 複製オブジェクトのクラスを指します。同一のクラスであれば同じIDとなります。 このIDはDDLコンパイラによって自動的に生成されます。 DOCLASSIDマクロを利用すると、指定された複製オブジェクトクラスのDOClassIDを取得することが出来ます。

戻り値
この複製オブジェクトインスタンスの、複製オブジェクトクラスIDが返ります。
qBool nn::nex::DuplicatedObject::IsA ( DOClassID  idDOCID) const
inherited

この複製オブジェクトインスタンスが指定された複製オブジェクトクラスのインスタンスであるかを調べます。

DOCLASSIDマクロを利用すると、指定された複製オブジェクトクラスのDOClassID を取得することが出来ます。

引数
[in]idDOCID複製オブジェクトクラスIDを指定します。


戻り値一覧:

true この複製オブジェクトは指定されたidDOCIDで示される複製オブジェクトクラスのインスタンスです。

false この複製オブジェクトは指定されたidDOCIDで示される複製オブジェクトクラスのインスタンスではありません。

参照
IsAKindOf
qBool nn::nex::DuplicatedObject::IsAKindOf ( DOClassID  idDOCID) const
inherited

この複製オブジェクトインスタンスが指定された複製オブジェクトクラス、またはその派生関係であるかどうかを調べます。

DOCLASSIDマクロを利用すると、指定された複製オブジェクトクラスのDOClassID を取得することが出来ます。

引数
[in]idDOCID複製オブジェクトクラスIDを指定します。


戻り値一覧:

true この複製オブジェクトは指定されたidDOCIDで示される複製オブジェクトクラスかその派生関係のインスタンスです。

false この複製オブジェクトは指定されたidDOCIDで示される複製オブジェクトクラスでもその破線関係クラスのインスタンスでもありません。

参照
IsAKindOf
qResult nn::nex::DuplicatedObject::Update ( )
inherited

すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。

この関数は、複製マスターのみが呼び出してください。

この関数は内部的にCPUチックを取得します。 CTRで最大限パフォーマンスを得るために、別の位置でSessionClock の値を取得して その値を明示的に指定するオーバーロードを利用することを推奨します。

Reliable通信を指定した送信では、送信対象となったステーションへの送信バッファのうち一つでも 空きがない場合にReliableSendBufferFullエラーを返します。 また、Reliable通信に限らず送信に必要なパケットバッファの空きが十分に無い場合はPacketBufferFullエラーを返します。 これらは一時的に送信バッファの上限に達したことを示すエラーであるため、 ReliableSendBufferFullまたはPacketBufferFullが発生した場合は、ディスパッチを行い時間をおいてから再度送信を行ってください。 高頻度でPacketBufferFullが発生する場合は、パケットバッファを増やす対策も行ってください。 パケットバッファの設定については、PacketBufferManager を参照してください。

エラーとなった場合は、エラーとなったあるデータセットが、すべてのステーションへ到達しないことを保証しますが、 エラー以前のデータセットは到達します。


戻り値一覧:

"QSUCCESS(Core, Success)" 送信リクエストが成功した場合

"QERROR(DOCore, InvalidRole)" 複製マスター以外から呼び出した場合

"QERROR(Transport, ReliableSendBufferFull)" Reliable通信の送信バッファが一杯の場合(本関数でこのエラーが返っても NetZ::GetFatalError で取得できるフェイタルエラーにはセットされません)

"QERROR(Transport, InvalidSubStreamID)" DataSet::SetSubStreamID() で指定されたSubStreamIDが無効なIDの場合

"QERROR(Transport, PacketBufferFull)" パケットバッファの空きが不足した場合(本関数でこのエラーが返っても NetZ::GetFatalError で取得できるフェイタルエラーにはセットされません)

参照
SubStreamIDDefine, StreamSettings::SetMaxUserReliableSubStreams()
qResult nn::nex::DuplicatedObject::Update ( const Time tUpdateTime)
inherited

すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。

この関数は、複製マスターのみが呼び出してください。

このオーバーロードでは、明示的に現在のSessionClock の値を指定して 更新処理を行うことが出来ます。多く存在する複製オブジェクトそれぞれに対して Updateを行う必要がある場合、ループの外側でSessionClock を取得して、 その値をこのオーバーロードに渡すことで最適化することが出来ます。

Reliable通信を指定した送信では、送信対象となったステーションへの送信バッファのうち一つでも 空きがない場合にReliableSendBufferFullエラーを返します。 また、Reliable通信に限らず送信に必要なパケットバッファの空きが十分に無い場合はPacketBufferFullエラーを返します。 これらは一時的に送信バッファの上限に達したことを示すエラーであるため、 ReliableSendBufferFullまたはPacketBufferFullが発生した場合は、ディスパッチを行い時間をおいてから再度送信を行ってください。 高頻度でPacketBufferFullが発生する場合は、パケットバッファを増やす対策も行ってください。 パケットバッファの設定については、PacketBufferManager を参照してください。

エラーとなった場合は、エラーとなったあるデータセットが、すべてのステーションへ到達しないことを保証しますが、 エラー以前のデータセットは到達します。

引数
[in]tUpdateTime現在のセッション時刻を指定します。


戻り値一覧:

"QSUCCESS(Core, Success)" 送信リクエストが成功した場合

"QERROR(DOCore, InvalidRole)" 複製マスター以外から呼び出した場合

"QERROR(Transport, ReliableSendBufferFull)" Reliable通信の送信バッファが一杯の場合(本関数でこのエラーが返っても NetZ::GetFatalError で取得できるフェイタルエラーにはセットされません)

"QERROR(Transport, InvalidSubStreamID)" DataSet::SetSubStreamID() で指定されたSubStreamIDが無効なIDの場合

"QERROR(Transport, PacketBufferFull)" パケットバッファの空きが不足した場合(本関数でこのエラーが返っても NetZ::GetFatalError で取得できるフェイタルエラーにはセットされません)

qResult nn::nex::DuplicatedObject::Update ( DataSet refDataset)
inherited

指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。

この関数は、複製マスターのみが呼び出してください。

すべてのデータセットを更新する場合に比べて通信量を削減することが出来ます。 この関数は内部的にCPUチックを取得します。 CTRで最大限パフォーマンスを得るために、別の位置でSessionClock の値を取得して その値を明示的に指定するオーバーロードを利用することを推奨します。

Reliable通信を指定した送信では、送信対象となったステーションへの送信バッファのうち一つでも 空きがない場合にReliableSendBufferFullエラーを返します。 また、Reliable通信に限らず送信に必要なパケットバッファの空きが十分に無い場合はPacketBufferFullエラーを返します。 これらは一時的に送信バッファの上限に達したことを示すエラーであるため、 ReliableSendBufferFullまたはPacketBufferFullが発生した場合は、ディスパッチを行い時間をおいてから再度送信を行ってください。 高頻度でPacketBufferFullが発生する場合は、パケットバッファを増やす対策も行ってください。 パケットバッファの設定については、PacketBufferManager を参照してください。

エラーとなった場合は、すべてのステーションへ到達しないことを保証します。

引数
[in]refDataset更新するデータセットを指定します。


戻り値一覧:

"QSUCCESS(Core, Success)" 送信リクエストが成功した場合

"QERROR(DOCore, InvalidRole)" 複製マスター以外から呼び出した場合

"QERROR(Transport, ReliableSendBufferFull)" Reliable通信の送信バッファが一杯の場合(本関数でこのエラーが返っても NetZ::GetFatalError で取得できるフェイタルエラーにはセットされません)

"QERROR(Transport, InvalidSubStreamID)" DataSet::SetSubStreamID() で指定されたSubStreamIDが無効なIDの場合

"QERROR(Transport, PacketBufferFull)" パケットバッファの空きが不足した場合(本関数でこのエラーが返っても NetZ::GetFatalError で取得できるフェイタルエラーにはセットされません)

qResult nn::nex::DuplicatedObject::Update ( DataSet refDataset,
const Time tUpdateTime 
)
inherited

指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。

この関数は、複製マスターのみが呼び出してください。

すべてのデータセットを更新する場合に比べて通信量を削減することが出来ます。 このオーバーロードでは、明示的に現在のSessionClock の値を指定して 更新処理を行うことが出来ます。多く存在する複製オブジェクトそれぞれに対して Updateを行う必要がある場合、ループの外側でSessionClock を取得して、 その値をこのオーバーロードに渡すことで最適化することが出来ます。

Reliable通信を指定した送信では、送信対象となったステーションへの送信バッファのうち一つでも 空きがない場合にReliableSendBufferFullエラーを返します。 また、Reliable通信に限らず送信に必要なパケットバッファの空きが十分に無い場合はPacketBufferFullエラーを返します。 これらは一時的に送信バッファの上限に達したことを示すエラーであるため、 ReliableSendBufferFullまたはPacketBufferFullが発生した場合は、ディスパッチを行い時間をおいてから再度送信を行ってください。 高頻度でPacketBufferFullが発生する場合は、パケットバッファを増やす対策も行ってください。 パケットバッファの設定については、PacketBufferManager を参照してください。

エラーとなった場合は、すべてのステーションへ到達しないことを保証します。

引数
[in]refDataset更新するデータセットを指定します。
[in]tUpdateTime現在のセッション時刻を指定します。


戻り値一覧:

"QSUCCESS(Core, Success)" 送信リクエストが成功した場合

"QERROR(DOCore, InvalidRole)" 複製マスター以外から呼び出した場合

"QERROR(Transport, ReliableSendBufferFull)" Reliable通信の送信バッファが一杯の場合(本関数でこのエラーが返っても NetZ::GetFatalError で取得できるフェイタルエラーにはセットされません)

"QERROR(Transport, InvalidSubStreamID)" DataSet::SetSubStreamID() で指定されたSubStreamIDが無効なIDの場合

"QERROR(Transport, PacketBufferFull)" パケットバッファの空きが不足した場合(本関数でこのエラーが返っても NetZ::GetFatalError で取得できるフェイタルエラーにはセットされません)

qBool nn::nex::DuplicatedObject::Refresh ( )
inherited

デュプリカのデータセットの情報をバッファから転送します。

DDL(データ定義言語)によって、データセットについてバッファを利用する設定にしている場合は、 メッセージ受信に対応して即座にデータセットは更新されず、それらのメッセージは一時的にバッファにプールされます。 DDLにて、bufferedプロパティ(バッファを利用する)あるいはextrapolation_filterプロパティ(推測航法を利用する)を 指示していると、そのデータセットはバッファを利用することになります。

この関数を利用すると、デュプリカが持っているすべてのデータセットについて、 バッファにためられた情報をデータセットに転送します。

この関数は、複製オブジェクトのインスタンスがデュプリカであるときのみ呼び出すことが出来ます。

CTRでは負荷軽減のために、明示的にセッションクロックを指定するオーバーロードを利用することを推奨します。


戻り値一覧:

true 正常に転送できた場合に返ります。

false 転送に失敗した場合に返ります。 複製マスターがこの関数を呼び出した場合、SYSTEMERROR_OBJDUP_INVALID_ON_MASTERがシグナルされます。

参照
IsADuplica
qBool nn::nex::DuplicatedObject::Refresh ( const Time tRefreshTime)
inherited

デュプリカのデータセットの情報をバッファから転送します。

DDL(データ定義言語)によって、データセットについてバッファを利用する設定にしている場合は、 メッセージ受信に対応して即座にデータセットは更新されず、それらのメッセージは一時的にバッファにプールされます。 DDLにて、bufferedプロパティ(バッファを利用する)あるいはextrapolation_filterプロパティ(推測航法を利用する)を 指示していると、そのデータセットはバッファを利用することになります。

この関数を利用すると、デュプリカが持っているすべてのデータセットについて、 バッファにためられた情報をデータセットに転送します。

この関数は、複製オブジェクトのインスタンスがデュプリカであるときのみ呼び出すことが出来ます。

引数
[in]tRefreshTime値を更新する時刻を指定します。
戻り値一覧:

true 正常に転送できた場合に返ります。

false 転送に失敗した場合に返ります。 複製マスターがこの関数を呼び出した場合、SYSTEMERROR_OBJDUP_INVALID_ON_MASTERがシグナルされます。

参照
IsADuplica
qBool nn::nex::DuplicatedObject::Refresh ( DataSet refDataset)
inherited

デュプリカのデータセットの情報をバッファから転送します。

DDL(データ定義言語)によって、データセットについてバッファを利用する設定にしている場合は、 メッセージ受信に対応して即座にデータセットは更新されず、それらのメッセージは一時的にバッファにプールされます。 DDLにて、bufferedプロパティ(バッファを利用する)あるいはextrapolation_filterプロパティ(推測航法を利用する)を 指示していると、そのデータセットはバッファを利用することになります。

この関数を利用すると、指定されたデータセットの バッファにためられた情報をデータセットに転送します。

この関数は、複製オブジェクトのインスタンスがデュプリカであるときのみ呼び出すことが出来ます。

CTRでは負荷軽減のために、明示的にセッションクロックを指定するオーバーロードを利用することを推奨します。

引数
[in]refDataset転送するデータセットを指定します。
戻り値一覧:

true 正常に転送できた場合に返ります。

false 転送に失敗した場合に返ります。 複製マスターがこの関数を呼び出した場合、SYSTEMERROR_OBJDUP_INVALID_ON_MASTERがシグナルされます。

参照
IsADuplica
qBool nn::nex::DuplicatedObject::Refresh ( DataSet refDataset,
const Time tRefreshTime 
)
inherited

デュプリカのデータセットの情報をバッファから転送します。

DDL(データ定義言語)によって、データセットについてバッファを利用する設定にしている場合は、 メッセージ受信に対応して即座にデータセットは更新されず、それらのメッセージは一時的にバッファにプールされます。 DDLにて、bufferedプロパティ(バッファを利用する)あるいはextrapolation_filterプロパティ(推測航法を利用する)を 指示していると、そのデータセットはバッファを利用することになります。

この関数を利用すると、指定されたデータセットの バッファにためられた情報をデータセットに転送します。

この関数は、複製オブジェクトのインスタンスがデュプリカであるときのみ呼び出すことが出来ます。

引数
[in]refDataset転送するデータセットを指定します。
[in]tRefreshTime値を更新する時刻を指定します。
戻り値一覧:

true 正常に転送できた場合に返ります。

false 転送に失敗した場合に返ります。 複製マスターがこの関数を呼び出した場合、SYSTEMERROR_OBJDUP_INVALID_ON_MASTERがシグナルされます。

参照
IsADuplica
virtual qBool nn::nex::DuplicatedObject::ApproveFaultRecovery ( )
virtualinherited

複製オブジェクトに障害回復機能をつけるかどうかを返します。

電源断などの障害発生時に、この仮想関数がシステム側から呼び出され、 複製オブジェクトがセッション中に存在し続けるかどうかを返します。 複製オブジェクトのすべてのインスタンス(複製マスター、およびデュプリカ)にて呼び出されますが、 同一クラスのすべてのインスタンスすべてが同じ値を返す必要があります。

この関数をアプリケーションでオーバーライドすることによって、 複製オブジェクトクラスごとに挙動を変更することが出来ます。 デフォルトでは、このシステムコールバックは常にfalseを返す (マイグレーションが発生しない)ようになっています。

この機能は、電源断など、障害が発生したことに対してのみ有効です。 正常シーケンスでのセッション離脱においても同様に複製オブジェクトを セッションに残し続けるには、AttemptEmigration(DOHandle) をオーバーライドしてください。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。


戻り値一覧:

true マイグレーションを発生させる場合に返ります。

false マイグレーションを発生させない場合に返します。

参照
ApproveEmigration, FaultRecoveryOperation

nn::nex::Station, nn::nex::IDGeneratorで再実装されています。

virtual qBool nn::nex::DuplicatedObject::ApproveEmigration ( qUnsignedInt32  uiReason)
virtualinherited

複製オブジェクトがマイグレーションを行うかどうかを返します。

マイグレーションとは、複製オブジェクトのコントロール権限が 別のステーションに移行することを指します。 この関数は、正常シーケンスでステーションがセッションから抜けるとき、 その直前にシステム側から呼び出され、 別のステーションにオブジェクトの権限を移行するかどうかを返します。 アプリケーションはこの関数をオーバーライドすることによって挙動を変更することが出来ます。

障害発生時(たとえば電源断などが原因でステーションが急にセッションから消えたときなど)に、 複製オブジェクトが存在し続ける機能を実装する場合は、 この関数ではなく、ApproveFaultRecovery 関数をオーバーライドします。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。

引数
[in]uiReason常にMIGRATION_REASON_LEAVING_SESSIONが指定されます。
戻り値一覧:

true 複製オブジェクトのマイグレーションを行います。 セッションに存在していた複製オブジェクトはそのコントロール権限をセッションに残るステーションに移譲します。

false 複製オブジェクトのマイグレーションを行いません。 今までセッションに存在していた複製オブジェクトは破棄されます。

参照
ApproveFaultRecovery, RemoveFromStoreOperation

nn::nex::Station, nn::nex::IDGeneratorで再実装されています。

virtual void nn::nex::DuplicatedObject::InitDO ( )
virtualinherited

複製オブジェクトが初期化されたときにシステム側から呼び出されます。

InitDOが呼び出されたとき、複製オブジェクトの役割(複製マスターであるのか、デュプリカであるのか)は決定された状態です。 もしこれがデュプリカである場合、すべてのデータセットは初期化された状態になっています。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。

virtual qReal nn::nex::DuplicatedObject::ComputeDistance ( DuplicatedObject pOtherObject)
virtualinherited

推測航法において、距離ベースの推定エラーを計算する際の距離計算を行います。

本関数は、距離ベースの推測航法を利用する際に アプリケーション側で定義した複製オブジェクトクラスでオーバーライドしてください。

アプリケーションから実行する必要はなく、Scheduler::Dispatch() 中にシステムからコールされます。

推測航法についてはプログラミングマニュアルを参照してください。

引数
[in]pOtherObjectステーションに登録されたオブザーバーである複製オブジェクトへのポインタが渡されます。
戻り値
ComputeDistanceが呼び出された複製オブジェクトと、pOtherObject 間の距離を返すように実装してください。
参照
Station::RegisterObserver
virtual void nn::nex::DuplicatedObject::OperationBegin ( DOOperation pOperation)
virtualinherited

複製オブジェクトシステム操作が開始されるたびに呼び出されます。

この関数は、複製オブジェクトシステム操作(DOOperation)が開始されようとしているときに その複製オブジェクトシステム操作インスタンスへのポインタとともにシステム側から呼び出されます。 Operation::GetType 関数を呼び出すことによって どの種類の操作が行われようとしているかを判定することが出来ます。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。

引数
[in]pOperationこれから実行される操作オブジェクトへのポインタが渡されます。
参照
OperationEnd

nn::nex::Station, nn::nex::Sessionで再実装されています。

virtual void nn::nex::DuplicatedObject::OperationEnd ( DOOperation pOperation)
virtualinherited

複製オブジェクトシステム操作が終了されるたびに呼び出されます。

この関数は、複製オブジェクトシステム操作(DOOperation)が終わった後で その複製オブジェクトシステム操作インスタンスへのポインタとともにシステム側から呼び出されます。 Operation::GetType 関数を呼び出すことによって どの種類の操作が行われようとしているかを判定することが出来ます。

※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。

引数
[in]pOperationこれから実行される操作オブジェクトへのポインタが渡されます。
参照
OperationEnd

nn::nex::Station, nn::nex::SessionClock, nn::nex::IDGenerator, nn::nex::Sessionで再実装されています。

virtual void nn::nex::DuplicatedObject::Trace ( qUnsignedInt64  uiTraceFlag = TRACE_ALWAYS) const
virtualinherited

この複製オブジェクトの状態をトレースします(デバッグ用)。

引数
[in]uiTraceFlagどのフラグが有効であるときにトレースを実行するのか指定します。

nn::nex::Session, nn::nex::Station, nn::nex::IDGeneratorで再実装されています。

static DOOperation* nn::nex::DuplicatedObject::GetCurrentOperation ( )
staticinherited

現在実行している最中の、複製オブジェクトに対する操作オブジェクトへのポインタを取得します。

この関数は、RMC(リモートメソッドコール)呼び出しを制御するために、 CallMethodOperation が実行中であるかどうかを調べるときに利用します。

戻り値
現在実行している最中の、DOOperationへのポインタが返ります。
参照
Operation::GetType
qBool nn::nex::DuplicatedObject::CreateDuplica ( DOHandle  hNewDuplicaStation)
inherited

この複製オブジェクトのデュプリカを作成します。

この関数は、ステーションにオブジェクトのデュプリカを作成するひとつの方法です。 この関数は複製マスターが呼び出し、それ自身のデュプリカを作るために呼び出さなければなりません。

引数
[in]hNewDuplicaStationデュプリカの作成先のステーション(Station)の複製オブジェクトハンドル(DOHandle)を指定します。
戻り値一覧:

true デュプリカの作成に成功したときに返ります。

false デュプリカの作成に失敗したときに返ります。

static qBool nn::nex::DuplicatedObject::FetchDuplica ( FetchContext pContext,
DOHandle  hFetchedObject 
)
staticinherited

複製オブジェクトのデュプリカを取ってきます。

この関数は、ステーションにオブジェクトのデュプリカを作成するひとつの方法です。

引数
[in,out]pContextFetchContext へのポインタを指定します。
[in]hFetchedObject取ってこられる複製オブジェクトへのハンドル(DOHandle)を指定します。


戻り値一覧:

true 複製オブジェクトのデュプリカを取ってくるのに成功した場合に返ります。

false 複製オブジェクトのデュプリカを取ってくるのに失敗した場合に返ります。

qBool nn::nex::DuplicatedObject::Emigrate ( MigrationContext pContext,
DOHandle  hTargetStation 
)
inherited

この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。

マイグレーションとは、複製オブジェクトのコントロール権限がステーション間で移転することをいいます。 マイグレーションには大きく分けて二つのプロセスがあり、 最初に実行される複製オブジェクトの権限が移行するプロセスのことをエミグレーション(emigration)、 次に実行される複製オブジェクトを受け入れるプロセスをイミグレーション(immigration)と呼びます。 この関数では前者の処理を実行することになります。

この関数は複製マスター(IsADuplicationMaster)が呼び出す必要があります。 指定されたpContextが初期化されたときに、コンストラクタに同期実行を指定すると、 この関数呼び出しは即座に終了せずに実行が完了するかエラーが発生するまで返ってこなくなります。 非同期実行を指定すると、この関数呼び出しは即座に終了します。

引数
[in,out]pContextこの呼び出しのMigrationContext へのポインタを指定します。
[in]hTargetStation複製オブジェクトの移転先ステーションの複製オブジェクトハンドルを指定します。
戻り値一覧:

true 呼び出しが正常に開始された場合に返ります。

false 呼び出しが正常に開始されなかった場合に返ります。 SYSTEMERROR_OBJDUP_CANNOT_EMIGRATEまたはSYSTEMERROR_OBJDUP_INVALID_ON_DUPLICAがシグナルされます。

参照
AttemptEmigration(DOHandle), MigrationInProgress
qBool nn::nex::DuplicatedObject::MigrationInProgress ( ) const
inherited

この複製オブジェクトがマイグレーションを行っている最中かどうかを取得します。

マイグレーションとは、複製オブジェクトのコントロール権限がステーション間で移転することをいいます。 複製オブジェクトは、以下の理由によってマイグレーションを行う場合があります。


戻り値一覧:

true マイグレーションを実行している最中のときに返ります。

false マイグレーションを実行していないか、エラーが発生した場合に返ります。

参照
Emigrate, AttemptEmigration(DOHandle)
qBool nn::nex::DuplicatedObject::AttemptEmigration ( DOHandle  hNewLocation)
inherited

この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。

マイグレーションとは、複製オブジェクトのコントロール権限がステーション間で移転することをいいます。 マイグレーションには大きく分けて二つのプロセスがあり、 最初に実行される複製オブジェクトの権限が移行するプロセスのことをエミグレーション(emigration)、 次に実行される複製オブジェクトを受け入れるプロセスをイミグレーション(immigration)と呼びます。 この関数では前者の処理を実行することになります。

この関数は複製マスター(IsADuplicationMaster)が呼び出す必要があります。 関数の実行は即座に終了します(非同期実行)。

引数
[in]hNewLocation複製オブジェクトの移転先ステーションの複製オブジェクトハンドルを指定します。
戻り値一覧:

true 呼び出しが正常に開始された場合に返ります。

false 呼び出しが正常に開始されなかった場合に返ります。

参照
Emigrate, MigrationInProgress
DOHandle nn::nex::DuplicatedObject::GetMasterStation ( ) const
inherited

この複製オブジェクトの複製マスターとなっているStation オブジェクトの複製オブジェクトハンドルを取得します。

Session クラスに対してこの関数を呼び出せば、ゲームセッションのマスターが誰かを調べることが出来ます。

戻り値
この複製オブジェクトの複製マスターとなっているStation オブジェクトのDOHandle が返ります。
StationID nn::nex::DuplicatedObject::GetMasterID ( ) const
inherited

この複製オブジェクトのマスターのステーションのStationIDを取得します。

戻り値
この複製オブジェクトのマスターのステーションのStationIDが返ります。
qBool nn::nex::DuplicatedObject::IsADuplica ( ) const
inherited

この複製オブジェクトがデュプリカであるか、そうでないかを取得します。

デュプリカとは、複製オブジェクトの中でも、複製マスターのただのコピーである状態のことを言います。 複製マスター(コピー元)に加えられた値の変化は、ネットワークを通じてセッション中に存在する デュプリカの値を更新し、コピーされた状態を保ち続けようとします。 この関数がtrueを返したとき、この複製オブジェクトのインスタンスはデュプリカです。

複製オブジェクトに対する役割が初期化されているときは、複製オブジェクトは 複製マスターでもデュプリカでもありません。この関数がコンストラクタなどで 呼び出された場合がその典型的なケースです。どちらの役割になるかは InitDO コールバックによって決定されます。


戻り値一覧:

true この複製オブジェクトはデュプリカです。

false この複製オブジェクトは複製マスターであるか、不明な状態です。

qBool nn::nex::DuplicatedObject::IsADuplicationMaster ( ) const
inherited

この複製オブジェクトが複製マスターであるか、そうでないかを取得します。

複製マスターとは、複製オブジェクトの中でも、現在実行しているマシンによって作成されたか、 あるいは現在実行しているマシンに権限が移転されてきたかによって、 オブジェクトのデータを提供している側の状態のことを言います。 このオブジェクトに加えられた値の変化は、ネットワークを通じてセッション中に存在するデュプリカ (複製マスターから情報をコピーされたオブジェクト)の値を更新します。 この関数がtrueを返したとき、この複製オブジェクトのインスタンスは複製マスターです。

複製オブジェクトに対する役割が初期化されているときは、複製オブジェクトは 複製マスターでもデュプリカでもありません。この関数がコンストラクタなどで 呼び出された場合がその典型的なケースです。どちらの役割になるかは InitDO コールバックによって決定されます。


戻り値一覧:

true この複製オブジェクトは複製マスターです。

false この複製オブジェクトはデュプリカであるか、不明な状態です。

qBool nn::nex::DuplicatedObject::HasAuthority ( ) const
inherited

この複製オブジェクトが権限を持っているかどうかを取得します。

複製オブジェクトは複製マスターであるときのみ権限を持ちます。 権限を持つ複製マスターはセッションクリティカルな操作 (たとえばオブジェクトの主参照を削除する、あるいは移行するなど)を 行うことが出来ます。ただし、マイグレーション(複製オブジェクトのコントロール権限の移転)を 行っている最中の複製オブジェクトは、 どのステーションもセッションクリティカルな操作が出来ない状態となります。 複製マスターであったとしても、マイグレーション実行中はコントロール権限がありません。 この関数では、マイグレーションが実行されている最中かどうかも含めて判定することが出来ます。

NEXプログラミングマニュアルに、マイグレーションに関する タイムラインなども含めた詳しい解説を掲載していますので併せて参照してください。


戻り値一覧:

true 複製オブジェクトに対する権限を持っているときに返ります。

false 複製オブジェクトに対する権限を持っていないときに返ります。

qBool nn::nex::DuplicatedObject::IsAWellKnownDO ( ) const
inherited

この複製オブジェクトが既知オブジェクトクラスのインスタンスであるかどうかを取得します。

既知オブジェクトは、セッションの中で全体的に知られていて、 すべてのステーションはセッションに参加する前からオブジェクトの状態が共有されるような オブジェクトのことを指します。


戻り値一覧:

true このオブジェクトはDDL(データ定義言語)ファイルで定義されている既知オブジェクトのインスタンスです。

false このオブジェクトは既知オブジェクトのインスタンスではありません。

virtual qBool nn::nex::DuplicatedObject::IsACoreDO ( ) const
virtualinherited

この複製オブジェクトがCoreDOであるかどうかを取得します。

CoreDOとは、Net-Zシステムによって作成される複製オブジェクトのこと言います。 アプリケーションのDDL(データ定義言語)によって宣言された複製オブジェクトクラスは CoreDOではなくUserDOと呼ばれます。CoreDOにはStationSessionSessionClock などのクラスが含まれます。


戻り値一覧:

true この複製オブジェクトがCoreDOであるときに返ります。

false この複製オブジェクトがCoreDOでないときに返ります。

参照
IsAUserDO
qBool nn::nex::DuplicatedObject::IsAUserDO ( ) const
inherited

この複製オブジェクトがUserDOであるかどうかを取得します。

UserDOとは、アプリケーションのDDL(データ定義言語)によって宣言された 複製オブジェクトクラスのことを言います。


戻り値一覧:

true この複製オブジェクトがUserDOであるときに返ります。

false この複製オブジェクトがUserDOでないときに返ります。

参照
IsACoreDO
static OperationManager* nn::nex::DuplicatedObject::GetOperationManager ( )
staticinherited

OperationManager へのポインタを取得します。

この関数は、すべてのDOOperation オブジェクトを管理するOperationManager オブジェクトへのポインタを返します。 OperationManager の主な目的は、さまざまなシステム操作の開始と終了時に呼び出されるコールバック関数の管理です。

戻り値
OperationManager へのポインタが返ります。
qBool nn::nex::DuplicatedObject::DeleteMainRef ( )
inherited

複製オブジェクトの主参照を削除するように指示します。

この関数を呼び出すと、複製オブジェクトストアに格納されている 複製オブジェクト主参照(システム参照)を削除します。 オブジェクトの主参照が削除されると、オブジェクトの持つデータセットは更新することをやめ、 イテレーションされている選択からはほどなく見えなくなります。

主参照が唯一の参照であった場合、複製オブジェクトのデストラクタが呼び出され、 この呼び出しによって複製オブジェクトは削除されます。 この複製オブジェクトの複製マスターまたはデュプリカに対する参照がまだ残っている場合 (たとえばRefTemplate によってこのオブジェクトへの参照が存在する場合など)、 デストラクタは最後の参照が解放されるまでは実行されません。 デストラクタが呼び出されたときに、このオブジェクトのすべてのデュプリカは削除されます。

この関数は複製マスターのみが呼び出すことが出来ます。 複製オブジェクトに対してPublish 関数が呼び出されていない状態であっても呼び出すことは可能です。

参照
~DuplicatedObject, MainRefIsDeleted
qBool nn::nex::DuplicatedObject::MainRefIsDeleted ( ) const
inherited

DeleteMainRef 関数がこのオブジェクトに対して呼び出されたかどうかを取得します。

DeleteMainRef 関数が呼び出されたら (つまり、複製オブジェクトの主参照が削除されようとしたら)、 すべての参照が解放されたタイミングでデストラクタが呼ばれます。


戻り値一覧:

true 主参照が削除されたときに返ります。

false 主参照は削除されていないか、エラーが発生した場合に返ります。

参照
DeleteMainRef
static DuplicatedObject* nn::nex::DuplicatedObject::Create ( qUnsignedInt32  uiTimeout = DEFAULT_CREATE_TIMEOUT)
staticinherited

複製オブジェクトのローカルインスタンスを作成します。

本関数はNULLを返す可能性があります。 NULLが返ってきた場合には速やかにNetZインスタンスを破棄し、セッションから抜けてください。

通常はブロックせずにすぐに値が返されます。 しかし、セッション参加後の複製オブジェクトの初期化処理が完了するよりも前に、 親と通信できなくなったレアなケースではNULLが返り、 このような場合に最大で uiTimeout のブロックが発生することがあります。

uiTimeout に0を指定してノンブロックで本関数を利用することもできます。

この静的関数は、DDL(データ定義言語)コンパイラによって作成される すべての複製オブジェクトクラスごとに定義される関数です。 たとえば、Avatarクラスを作成する場合、Avatar::Create()と呼び出します。 DuplicatedObject::Createという関数はサポートされません。

引数
[in]uiTimeout作成されるのを待つタイムアウトをミリ秒単位で指定します。デフォルトは1000です。
戻り値
作成された複製オブジェクトローカルインスタンスへのポインタが返ります。
戻り値一覧:
NULL セッション参加後の複製オブジェクトの初期化処理が完了するよりも前に、 親と通信できなくなったレアなケースで返ります。 NULLが返ってきた場合、必ずNetZインスタンスを破棄し、セッションから抜けてください。
参照
Publish, CreateWellKnown
static DuplicatedObject* nn::nex::DuplicatedObject::Create ( DOID  idUserDefinedID)
staticinherited

複製オブジェクトのローカルインスタンスを作成します。

この静的関数は、DDL(データ定義言語)コンパイラによって作成される すべての複製オブジェクトクラスごとに定義される関数です。 たとえば、Avatarクラスを作成する場合、Avatar::Create( idUserDefinedID )と呼び出します。 DuplicatedObject::Createという関数はサポートされません。

このオーバーロードでは明示的に、作成される複製オブジェクトのDOIDを指定します。 この値は、IDGenerator::GenerateID 関数を呼び出すことによって生成されます。 複製オブジェクトクラスごとのIDジェネレータの複製オブジェクトハンドルは、 DDLコンパイラによって自動的に生成されるソースコードの中に実装される、 GetIDGeneratorという関数にて取得することが出来ます。

引数
[in]idUserDefinedID作成する複製オブジェクトのDOID を指定します。
戻り値
作成された複製オブジェクトローカルインスタンスへのポインタが返ります。
参照
Publish, CreateWellKnown
static DuplicatedObject* nn::nex::DuplicatedObject::Create ( DOClassID  idDOClass,
qUnsignedInt32  uiTimeout = WAIT_INFINITE_TIMEOUT 
)
staticinherited

複製オブジェクトのローカルインスタンスを作成します。

指定された複製オブジェクトクラスID(DOClassID)型の 複製オブジェクトのローカルインスタンスを作成します。 複製オブジェクトクラスIDはDDL(データ定義言語)ファイルによって自動的に生成されます。 したがって、DDLファイルを書き換えてプログラムをリビルドすると値が変化する可能性があることに注意してください。

引数
[in]idDOClass作成する型の複製オブジェクトクラスID
[in]uiTimeout作成されるのを待つためのタイムアウト時間を指定します。デフォルトでは無期限です。
戻り値
作成された複製オブジェクトローカルインスタンスへのポインタが返ります。 もしもuiTimeoutで指定された数値が0の場合はSYSTEMERROR_GEN_INVALID_WAITがシグナルされます。
参照
Publish, CreateWellKnown
static DuplicatedObject* nn::nex::DuplicatedObject::Create ( DOClassID  idDOClass,
DOID  idUserDefinedID 
)
staticinherited

複製オブジェクトのローカルインスタンスを作成します。

指定された複製オブジェクトクラスID(DOClassID)型の 複製オブジェクトのローカルインスタンスを作成します。 複製オブジェクトクラスIDはDDL(データ定義言語)ファイルによって自動的に生成されます。 したがって、DDLファイルを書き換えてプログラムをリビルドすると値が変化する可能性があることに注意してください。

このオーバーロードでは明示的に、作成される複製オブジェクトのDOIDを指定します。 この値は、IDGenerator::GenerateID 関数を呼び出すことによって生成されます。 複製オブジェクトクラスごとのIDジェネレータの複製オブジェクトハンドルは、 DDLコンパイラによって自動的に生成されるソースコードの中に実装される、 GetIDGeneratorという関数にて取得することが出来ます。

引数
[in]idDOClass作成する型の複製オブジェクトクラスIDを指定します。
[in]idUserDefinedID作成される複製オブジェクトインスタンスIDを指定します。
戻り値
作成された複製オブジェクトローカルインスタンスへのポインタが返ります。
参照
Publish, CreateWellKnown
static DuplicatedObject* nn::nex::DuplicatedObject::Create ( const DOHandle dohHandle)
staticinherited

複製オブジェクトのローカルインスタンスを作成します。

このオーバーロードでは明示的に作成される複製オブジェクトのハンドルを指定します。 複製オブジェクトハンドル(DOHandle)は、複製オブジェクトクラスID(DOClassID)と 複製オブジェクトID(DOID)から作成されます。 それぞれを明示的に指定した場合のオーバーロードと同様の挙動になります。

引数
[in]dohHandle作成される複製オブジェクトのハンドルを指定します。
戻り値
作成された複製オブジェクトローカルインスタンスへのポインタが返ります。
参照
Publish, CreateWellKnown
static DuplicatedObject* nn::nex::DuplicatedObject::CreateWellKnown ( WKHandle hWK)
staticinherited

指定された既知オブジェクトを作成します。

既知オブジェクトとは、セッションが始まるときに参加者に必ず伝わっている複製オブジェクトのことを言います。 セッション中では全ステーションから参照することが出来、事実上のグローバルオブジェクトとして扱うことが出来ます。 たとえば、ゲームが行われている世界の情報(レベル、天候、敵AIの賢さ)など、 ゲームを開始するためには必ず必要となる情報を既知オブジェクトとして扱います。 どの情報を既知オブジェクトとするかはゲームの仕様により異なります。

この関数を利用すると、既知オブジェクトを作成することが出来ます。 すべての既知オブジェクトはセッションが構築される前に作成されている必要があります。 この関数はセッションマスターが呼び出す必要があります。

引数
[in]hWK既知オブジェクトインスタンスへの参照を示すグローバル変数を指定します。 DDLファイルに宣言した名称と同一名でなければなりません。
戻り値
作成された既知オブジェクトへのポインタが返ります。
qBool nn::nex::DuplicatedObject::Publish ( qUnsignedInt32  uiTimeout = DEFAULT_PUBLISH_TIMEOUT)
inherited

この複製オブジェクトのインスタンスをセッションにいるステーションに発行します。

複製オブジェクトは、作成された後に発行(パブリッシュ)されることで初めて セッション内の他のステーションが感知することが可能になります。

この関数が呼び出されたときに、発行される複製オブジェクトのデータセットが 最新であってほしい場合には、Create 関数が呼び出されたあと、Publish 関数が 呼び出される前に初期値をセットします。

引数
[in]uiTimeout発行完了まで待つタイムアウトをミリ秒単位で指定します。シングルスレッドモードの場合0になっている必要があります。デフォルトは1000msecです。
戻り値一覧:

true 正常に作成された場合に返ります。

false 作成に失敗した場合に返ります。 シングルスレッドで呼び出されuiTimeoutの値が不正な場合はSYSTEMERROR_GEN_INVALID_WAITがシグナルされます。 DeleteMainRef が呼び出された複製オブジェクトに対してこの関数が呼び出された場合、SYSTEMERROR_GEN_INVALID_OPERATIONがシグナルされます。 この値が返された場合にはDeleteMainRef 関数を呼び出して複製オブジェクトの主参照を削除する必要があります。

qBool nn::nex::DuplicatedObject::IsPublished ( ) const
inherited

この関数が発行されたかどうかを取得します。

複製オブジェクトは、作成された後に発行(パブリッシュ)されることで初めて セッション内の他のステーションが感知することが可能になります。


戻り値一覧:

true この複製オブジェクトがすでに発行済みである場合に返ります。

false この複製オブジェクトは正しく発行できていない場合に返ります。

static DuplicatedObject* nn::nex::DuplicatedObject::DynamicCast ( DuplicatedObject pDO)
staticinherited

複製オブジェクトへのポインタの動的キャストを行います。

指定されたDuplicatedObject*型のポインタを、ランタイム情報を用いて動的にキャストします。 この静的関数はDDL(データ定義言語)コンパイラによって自動的に作成されます。 たとえば、Avatarという名前のクラスをDDLファイルに宣言した場合、 Avatar::DynamicCast関数を呼び出すことで、機能を利用することが出来ます。 DuplicatedObject::DynamicCast関数の直接呼出しはサポートされません。

引数
[in]pDO複製オブジェクトへのポインタを指定します。
戻り値
pDOで指定された複製オブジェクトへのポインタが適切な型にキャストされて返ります。
戻り値一覧:
NULL pDOで指定された複製オブジェクトへのポインタが、想定される型でなかった場合に返ります。 たとえば、Avatar::DynamicCastを呼び出したときに、pDOがAvatar型でなければNULLが返ります。

メンバ詳解

const qUnsignedInt32 nn::nex::DuplicatedObject::DEFAULT_CREATE_TIMEOUT = 1000
staticinherited

DuplicatedObject::Create で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。

参照
DuplicatedObject::Create
const qUnsignedInt32 nn::nex::DuplicatedObject::DEFAULT_PUBLISH_TIMEOUT = 1000
staticinherited

DuplicatedObject::Publish で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。

参照
DuplicatedObject::Publish