すべての複製オブジェクトの基底クラスです。 [詳解]
#include <NetZ/src/Core/DOCore/DuplicatedObject.h>
公開型 | |
typedef RefTemplate< DuplicatedObject > | Ref |
複製オブジェクトへの安全な参照を行うためのtypdef | |
typedef SelectionIteratorTemplate< DuplicatedObject > | SelectionIterator |
複製オブジェクトを列挙するためのイテレータのtypedef | |
公開メンバ関数 | |
DuplicatedObject () | |
このコンストラクタはアプリケーション側から呼び出さないでください。 [詳解] | |
virtual | ~DuplicatedObject () |
このデストラクタはアプリケーション側から呼び出さないでください。 [詳解] | |
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 qChar * | GetClassNameString () const |
複製オブジェクトのクラス名を文字列として取得します。 [詳解] | |
const qChar * | GetDatasetNameString (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 DuplicatedObject * | Create (qUnsignedInt32 uiTimeout==DEFAULT_CREATE_TIMEOUT) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | Create (DOID idUserDefinedID) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | Create (DOClassID idDOClass, qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | Create (DOClassID idDOClass, DOID idUserDefinedID) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | Create (const DOHandle &dohHandle) |
複製オブジェクトのローカルインスタンスを作成します。 [詳解] | |
static DuplicatedObject * | CreateWellKnown (WKHandle &hWK) |
指定された既知オブジェクトを作成します。 [詳解] | |
static DuplicatedObject * | DynamicCast (DuplicatedObject *pDO) |
複製オブジェクトへのポインタの動的キャストを行います。 [詳解] | |
static qBool | FetchDuplica (FetchContext *pContext, DOHandle hFetchedObject) |
複製オブジェクトのデュプリカを取ってきます。 [詳解] | |
static DOOperation * | GetCurrentOperation () |
現在実行している最中の、複製オブジェクトに対する操作オブジェクトへのポインタを取得します。 [詳解] | |
static OperationManager * | GetOperationManager () |
OperationManager へのポインタを取得します。 [詳解] | |
静的公開変数類 | |
static const qUnsignedInt32 | DEFAULT_CREATE_TIMEOUT = 1000 |
DuplicatedObject::Create で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。 [詳解] | |
static const qUnsignedInt32 | DEFAULT_PUBLISH_TIMEOUT = 1000 |
DuplicatedObject::Publish で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。 [詳解] | |
すべての複製オブジェクトの基底クラスです。
DDL(データ定義言語)によって複製オブジェクトクラスが定義されると、それに対応するクラスはDDLコンパイラによって 自動的に生成されますが、それらすべてのクラスは、このDuplicatedObjectクラスより派生したものになります。 このDuplicatedObjectクラスは、複製オブジェクトに対する一般的な関数を含んでいて、 それらの関数はユーザー定義の複製オブジェクトでも利用することが出来ます。
また、システムからのコールバックも定義します。 いくつかのvirtual関数は、ユーザー定義の複製オブジェクトクラスからオーバーライドすることが 出来ることを意味していて、オーバーライドされた関数は適切なタイミングで呼び出されます。
nn::nex::DuplicatedObject::DuplicatedObject | ( | ) |
このコンストラクタはアプリケーション側から呼び出さないでください。
代わりに、DuplicatedObject::Create を呼び出します。
|
virtual |
このデストラクタはアプリケーション側から呼び出さないでください。
複製オブジェクトを破棄する正しい方法は、DeleteMainRef を呼び出すことです。 複製オブジェクトが破棄されるとき、関連付けられているデータセットと、既知ハンドルも、破棄されます。 この複製オブジェクトのデストラクタはvirtual関数ですので、ユーザー定義の複製オブジェクトで これをオーバーライドすることが可能です。
このデストラクタは即座に呼び出されません。 このオブジェクトに対するすべての参照がなくなった段階で破棄されることになります。
DOHandle nn::nex::DuplicatedObject::GetHandle | ( | ) | const |
この複製オブジェクトの複製オブジェクトハンドルを取得します。
qUnsignedInt32 nn::nex::DuplicatedObject::GetHandleValue | ( | ) | const |
この複製オブジェクトのインスタンスを表すqUnsignedInt32 型の値を取得します。
qBool nn::nex::DuplicatedObject::IsGlobal | ( | ) | const |
このインスタンスがグローバル複製オブジェクトであるかどうかを取得します。
グローバル複製オブジェクトとは、既知オブジェクトであるか、あるいは DDL(データ定義言語)にて、globaldoプロパティが設定された複製オブジェクトです (DDLの文法についての詳細はNEXプログラミングマニュアルを参照してください)。 これらのオブジェクトはセッション中で全体的にアクセスでき、 セッションに参加中のすべてのステーション(参加者)に対して複製されていることが保証されています。
true グローバル複製オブジェクトのインスタンスである場合に返ります。
false グローバル複製オブジェクトのインスタンスであに場合に返ります。
const qChar* nn::nex::DuplicatedObject::GetClassNameString | ( | ) | const |
複製オブジェクトのクラス名を文字列として取得します。
この関数をトレースに利用することでデバッグに役立てることが出来ます。
この複製オブジェクトに関連付けられているデータセットの名称を取得します。
この関数はトレースを行う際に便利に利用することが出来ます。 byDatasetIndexで指定しなければならないインデックス番号は、 DDLファイルに宣言された順番に割り当てられていきます。 この番号は1から始まる正の整数となります。
[in] | byDatasetIndex | データセットのインデックス番号を指定します。 |
DOClassID nn::nex::DuplicatedObject::GetDOClassID | ( | ) | const |
この複製オブジェクトの複製オブジェクトクラスIDを取得します。
複製オブジェクトクラスIDとは、DOClassID として定義される、 複製オブジェクトのクラスを指します。同一のクラスであれば同じIDとなります。 このIDはDDLコンパイラによって自動的に生成されます。 DOCLASSIDマクロを利用すると、指定された複製オブジェクトクラスのDOClassIDを取得することが出来ます。
この複製オブジェクトインスタンスが指定された複製オブジェクトクラス、またはその派生関係であるかどうかを調べます。
DOCLASSIDマクロを利用すると、指定された複製オブジェクトクラスのDOClassID を取得することが出来ます。
[in] | idDOCID | 複製オブジェクトクラスIDを指定します。 |
qResult nn::nex::DuplicatedObject::Update | ( | ) |
すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。
この関数は、複製マスターのみが呼び出してください。
この関数は内部的に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 で取得できるフェイタルエラーにはセットされません)
すべてのデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。
この関数は、複製マスターのみが呼び出してください。
このオーバーロードでは、明示的に現在の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 で取得できるフェイタルエラーにはセットされません)
指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。
この関数は、複製マスターのみが呼び出してください。
すべてのデータセットを更新する場合に比べて通信量を削減することが出来ます。 この関数は内部的に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 で取得できるフェイタルエラーにはセットされません)
指定されたデータセットの内容が更新されたことをセッションに存在するデュプリカに通知します。
この関数は、複製マスターのみが呼び出してください。
すべてのデータセットを更新する場合に比べて通信量を削減することが出来ます。 このオーバーロードでは、明示的に現在の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 | ( | ) |
デュプリカのデータセットの情報をバッファから転送します。
DDL(データ定義言語)によって、データセットについてバッファを利用する設定にしている場合は、 メッセージ受信に対応して即座にデータセットは更新されず、それらのメッセージは一時的にバッファにプールされます。 DDLにて、bufferedプロパティ(バッファを利用する)あるいはextrapolation_filterプロパティ(推測航法を利用する)を 指示していると、そのデータセットはバッファを利用することになります。
この関数を利用すると、デュプリカが持っているすべてのデータセットについて、 バッファにためられた情報をデータセットに転送します。
この関数は、複製オブジェクトのインスタンスがデュプリカであるときのみ呼び出すことが出来ます。
CTRでは負荷軽減のために、明示的にセッションクロックを指定するオーバーロードを利用することを推奨します。
true 正常に転送できた場合に返ります。
false 転送に失敗した場合に返ります。 複製マスターがこの関数を呼び出した場合、SYSTEMERROR_OBJDUP_INVALID_ON_MASTERがシグナルされます。
デュプリカのデータセットの情報をバッファから転送します。
DDL(データ定義言語)によって、データセットについてバッファを利用する設定にしている場合は、 メッセージ受信に対応して即座にデータセットは更新されず、それらのメッセージは一時的にバッファにプールされます。 DDLにて、bufferedプロパティ(バッファを利用する)あるいはextrapolation_filterプロパティ(推測航法を利用する)を 指示していると、そのデータセットはバッファを利用することになります。
この関数を利用すると、デュプリカが持っているすべてのデータセットについて、 バッファにためられた情報をデータセットに転送します。
この関数は、複製オブジェクトのインスタンスがデュプリカであるときのみ呼び出すことが出来ます。
[in] | tRefreshTime | 値を更新する時刻を指定します。 |
true 正常に転送できた場合に返ります。
false 転送に失敗した場合に返ります。 複製マスターがこの関数を呼び出した場合、SYSTEMERROR_OBJDUP_INVALID_ON_MASTERがシグナルされます。
デュプリカのデータセットの情報をバッファから転送します。
DDL(データ定義言語)によって、データセットについてバッファを利用する設定にしている場合は、 メッセージ受信に対応して即座にデータセットは更新されず、それらのメッセージは一時的にバッファにプールされます。 DDLにて、bufferedプロパティ(バッファを利用する)あるいはextrapolation_filterプロパティ(推測航法を利用する)を 指示していると、そのデータセットはバッファを利用することになります。
この関数を利用すると、指定されたデータセットの バッファにためられた情報をデータセットに転送します。
この関数は、複製オブジェクトのインスタンスがデュプリカであるときのみ呼び出すことが出来ます。
CTRでは負荷軽減のために、明示的にセッションクロックを指定するオーバーロードを利用することを推奨します。
[in] | refDataset | 転送するデータセットを指定します。 |
true 正常に転送できた場合に返ります。
false 転送に失敗した場合に返ります。 複製マスターがこの関数を呼び出した場合、SYSTEMERROR_OBJDUP_INVALID_ON_MASTERがシグナルされます。
デュプリカのデータセットの情報をバッファから転送します。
DDL(データ定義言語)によって、データセットについてバッファを利用する設定にしている場合は、 メッセージ受信に対応して即座にデータセットは更新されず、それらのメッセージは一時的にバッファにプールされます。 DDLにて、bufferedプロパティ(バッファを利用する)あるいはextrapolation_filterプロパティ(推測航法を利用する)を 指示していると、そのデータセットはバッファを利用することになります。
この関数を利用すると、指定されたデータセットの バッファにためられた情報をデータセットに転送します。
この関数は、複製オブジェクトのインスタンスがデュプリカであるときのみ呼び出すことが出来ます。
[in] | refDataset | 転送するデータセットを指定します。 |
[in] | tRefreshTime | 値を更新する時刻を指定します。 |
true 正常に転送できた場合に返ります。
false 転送に失敗した場合に返ります。 複製マスターがこの関数を呼び出した場合、SYSTEMERROR_OBJDUP_INVALID_ON_MASTERがシグナルされます。
|
virtual |
複製オブジェクトに障害回復機能をつけるかどうかを返します。
電源断などの障害発生時に、この仮想関数がシステム側から呼び出され、 複製オブジェクトがセッション中に存在し続けるかどうかを返します。 複製オブジェクトのすべてのインスタンス(複製マスター、およびデュプリカ)にて呼び出されますが、 同一クラスのすべてのインスタンスすべてが同じ値を返す必要があります。
この関数をアプリケーションでオーバーライドすることによって、 複製オブジェクトクラスごとに挙動を変更することが出来ます。 デフォルトでは、このシステムコールバックは常にfalseを返す (マイグレーションが発生しない)ようになっています。
この機能は、電源断など、障害が発生したことに対してのみ有効です。 正常シーケンスでのセッション離脱においても同様に複製オブジェクトを セッションに残し続けるには、AttemptEmigration(DOHandle) をオーバーライドしてください。
※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。
true マイグレーションを発生させる場合に返ります。
false マイグレーションを発生させない場合に返します。
nn::nex::Station, nn::nex::IDGeneratorで再実装されています。
|
virtual |
複製オブジェクトがマイグレーションを行うかどうかを返します。
マイグレーションとは、複製オブジェクトのコントロール権限が 別のステーションに移行することを指します。 この関数は、正常シーケンスでステーションがセッションから抜けるとき、 その直前にシステム側から呼び出され、 別のステーションにオブジェクトの権限を移行するかどうかを返します。 アプリケーションはこの関数をオーバーライドすることによって挙動を変更することが出来ます。
障害発生時(たとえば電源断などが原因でステーションが急にセッションから消えたときなど)に、 複製オブジェクトが存在し続ける機能を実装する場合は、 この関数ではなく、ApproveFaultRecovery 関数をオーバーライドします。
※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。
[in] | uiReason | 常にMIGRATION_REASON_LEAVING_SESSIONが指定されます。 |
true 複製オブジェクトのマイグレーションを行います。 セッションに存在していた複製オブジェクトはそのコントロール権限をセッションに残るステーションに移譲します。
false 複製オブジェクトのマイグレーションを行いません。 今までセッションに存在していた複製オブジェクトは破棄されます。
nn::nex::Station, nn::nex::IDGeneratorで再実装されています。
|
virtual |
複製オブジェクトが初期化されたときにシステム側から呼び出されます。
InitDOが呼び出されたとき、複製オブジェクトの役割(複製マスターであるのか、デュプリカであるのか)は決定された状態です。 もしこれがデュプリカである場合、すべてのデータセットは初期化された状態になっています。
※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。
|
virtual |
推測航法において、距離ベースの推定エラーを計算する際の距離計算を行います。
本関数は、距離ベースの推測航法を利用する際に アプリケーション側で定義した複製オブジェクトクラスでオーバーライドしてください。
アプリケーションから実行する必要はなく、Scheduler::Dispatch() 中にシステムからコールされます。
推測航法についてはプログラミングマニュアルを参照してください。
[in] | pOtherObject | ステーションに登録されたオブザーバーである複製オブジェクトへのポインタが渡されます。 |
|
virtual |
複製オブジェクトシステム操作が開始されるたびに呼び出されます。
この関数は、複製オブジェクトシステム操作(DOOperation)が開始されようとしているときに その複製オブジェクトシステム操作インスタンスへのポインタとともにシステム側から呼び出されます。 Operation::GetType 関数を呼び出すことによって どの種類の操作が行われようとしているかを判定することが出来ます。
※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。
[in] | pOperation | これから実行される操作オブジェクトへのポインタが渡されます。 |
nn::nex::Station, nn::nex::Sessionで再実装されています。
|
virtual |
複製オブジェクトシステム操作が終了されるたびに呼び出されます。
この関数は、複製オブジェクトシステム操作(DOOperation)が終わった後で その複製オブジェクトシステム操作インスタンスへのポインタとともにシステム側から呼び出されます。 Operation::GetType 関数を呼び出すことによって どの種類の操作が行われようとしているかを判定することが出来ます。
※この関数はアプリケーション側から呼び出すためではなく、 システム側から呼び出されるために用意されています。
[in] | pOperation | これから実行される操作オブジェクトへのポインタが渡されます。 |
nn::nex::Station, nn::nex::SessionClock, nn::nex::IDGenerator, nn::nex::Sessionで再実装されています。
|
virtual |
この複製オブジェクトの状態をトレースします(デバッグ用)。
[in] | uiTraceFlag | どのフラグが有効であるときにトレースを実行するのか指定します。 |
nn::nex::Session, nn::nex::Station, nn::nex::IDGeneratorで再実装されています。
|
static |
現在実行している最中の、複製オブジェクトに対する操作オブジェクトへのポインタを取得します。
この関数は、RMC(リモートメソッドコール)呼び出しを制御するために、 CallMethodOperation が実行中であるかどうかを調べるときに利用します。
|
static |
複製オブジェクトのデュプリカを取ってきます。
この関数は、ステーションにオブジェクトのデュプリカを作成するひとつの方法です。
[in,out] | pContext | FetchContext へのポインタを指定します。 |
[in] | hFetchedObject | 取ってこられる複製オブジェクトへのハンドル(DOHandle)を指定します。 |
true 複製オブジェクトのデュプリカを取ってくるのに成功した場合に返ります。
false 複製オブジェクトのデュプリカを取ってくるのに失敗した場合に返ります。
qBool nn::nex::DuplicatedObject::Emigrate | ( | MigrationContext * | pContext, |
DOHandle | hTargetStation | ||
) |
この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。
マイグレーションとは、複製オブジェクトのコントロール権限がステーション間で移転することをいいます。 マイグレーションには大きく分けて二つのプロセスがあり、 最初に実行される複製オブジェクトの権限が移行するプロセスのことをエミグレーション(emigration)、 次に実行される複製オブジェクトを受け入れるプロセスをイミグレーション(immigration)と呼びます。 この関数では前者の処理を実行することになります。
この関数は複製マスター(IsADuplicationMaster)が呼び出す必要があります。 指定されたpContextが初期化されたときに、コンストラクタに同期実行を指定すると、 この関数呼び出しは即座に終了せずに実行が完了するかエラーが発生するまで返ってこなくなります。 非同期実行を指定すると、この関数呼び出しは即座に終了します。
[in,out] | pContext | この呼び出しのMigrationContext へのポインタを指定します。 |
[in] | hTargetStation | 複製オブジェクトの移転先ステーションの複製オブジェクトハンドルを指定します。 |
true 呼び出しが正常に開始された場合に返ります。
false 呼び出しが正常に開始されなかった場合に返ります。 SYSTEMERROR_OBJDUP_CANNOT_EMIGRATEまたはSYSTEMERROR_OBJDUP_INVALID_ON_DUPLICAがシグナルされます。
qBool nn::nex::DuplicatedObject::MigrationInProgress | ( | ) | const |
この複製オブジェクトがマイグレーションを行っている最中かどうかを取得します。
マイグレーションとは、複製オブジェクトのコントロール権限がステーション間で移転することをいいます。 複製オブジェクトは、以下の理由によってマイグレーションを行う場合があります。
true マイグレーションを実行している最中のときに返ります。
false マイグレーションを実行していないか、エラーが発生した場合に返ります。
この複製オブジェクトを指定されたステーションに対してエミグレーションさせます。
マイグレーションとは、複製オブジェクトのコントロール権限がステーション間で移転することをいいます。 マイグレーションには大きく分けて二つのプロセスがあり、 最初に実行される複製オブジェクトの権限が移行するプロセスのことをエミグレーション(emigration)、 次に実行される複製オブジェクトを受け入れるプロセスをイミグレーション(immigration)と呼びます。 この関数では前者の処理を実行することになります。
この関数は複製マスター(IsADuplicationMaster)が呼び出す必要があります。 関数の実行は即座に終了します(非同期実行)。
[in] | hNewLocation | 複製オブジェクトの移転先ステーションの複製オブジェクトハンドルを指定します。 |
true 呼び出しが正常に開始された場合に返ります。
false 呼び出しが正常に開始されなかった場合に返ります。
DOHandle nn::nex::DuplicatedObject::GetMasterStation | ( | ) | const |
StationID nn::nex::DuplicatedObject::GetMasterID | ( | ) | const |
この複製オブジェクトのマスターのステーションのStationIDを取得します。
qBool nn::nex::DuplicatedObject::IsADuplica | ( | ) | const |
この複製オブジェクトがデュプリカであるか、そうでないかを取得します。
デュプリカとは、複製オブジェクトの中でも、複製マスターのただのコピーである状態のことを言います。 複製マスター(コピー元)に加えられた値の変化は、ネットワークを通じてセッション中に存在する デュプリカの値を更新し、コピーされた状態を保ち続けようとします。 この関数がtrueを返したとき、この複製オブジェクトのインスタンスはデュプリカです。
複製オブジェクトに対する役割が初期化されているときは、複製オブジェクトは 複製マスターでもデュプリカでもありません。この関数がコンストラクタなどで 呼び出された場合がその典型的なケースです。どちらの役割になるかは InitDO コールバックによって決定されます。
true この複製オブジェクトはデュプリカです。
false この複製オブジェクトは複製マスターであるか、不明な状態です。
qBool nn::nex::DuplicatedObject::IsADuplicationMaster | ( | ) | const |
この複製オブジェクトが複製マスターであるか、そうでないかを取得します。
複製マスターとは、複製オブジェクトの中でも、現在実行しているマシンによって作成されたか、 あるいは現在実行しているマシンに権限が移転されてきたかによって、 オブジェクトのデータを提供している側の状態のことを言います。 このオブジェクトに加えられた値の変化は、ネットワークを通じてセッション中に存在するデュプリカ (複製マスターから情報をコピーされたオブジェクト)の値を更新します。 この関数がtrueを返したとき、この複製オブジェクトのインスタンスは複製マスターです。
複製オブジェクトに対する役割が初期化されているときは、複製オブジェクトは 複製マスターでもデュプリカでもありません。この関数がコンストラクタなどで 呼び出された場合がその典型的なケースです。どちらの役割になるかは InitDO コールバックによって決定されます。
true この複製オブジェクトは複製マスターです。
false この複製オブジェクトはデュプリカであるか、不明な状態です。
qBool nn::nex::DuplicatedObject::HasAuthority | ( | ) | const |
この複製オブジェクトが権限を持っているかどうかを取得します。
複製オブジェクトは複製マスターであるときのみ権限を持ちます。 権限を持つ複製マスターはセッションクリティカルな操作 (たとえばオブジェクトの主参照を削除する、あるいは移行するなど)を 行うことが出来ます。ただし、マイグレーション(複製オブジェクトのコントロール権限の移転)を 行っている最中の複製オブジェクトは、 どのステーションもセッションクリティカルな操作が出来ない状態となります。 複製マスターであったとしても、マイグレーション実行中はコントロール権限がありません。 この関数では、マイグレーションが実行されている最中かどうかも含めて判定することが出来ます。
NEXプログラミングマニュアルに、マイグレーションに関する タイムラインなども含めた詳しい解説を掲載していますので併せて参照してください。
true 複製オブジェクトに対する権限を持っているときに返ります。
false 複製オブジェクトに対する権限を持っていないときに返ります。
qBool nn::nex::DuplicatedObject::IsAWellKnownDO | ( | ) | const |
この複製オブジェクトが既知オブジェクトクラスのインスタンスであるかどうかを取得します。
既知オブジェクトは、セッションの中で全体的に知られていて、 すべてのステーションはセッションに参加する前からオブジェクトの状態が共有されるような オブジェクトのことを指します。
true このオブジェクトはDDL(データ定義言語)ファイルで定義されている既知オブジェクトのインスタンスです。
false このオブジェクトは既知オブジェクトのインスタンスではありません。
|
virtual |
この複製オブジェクトがCoreDOであるかどうかを取得します。
CoreDOとは、Net-Zシステムによって作成される複製オブジェクトのこと言います。 アプリケーションのDDL(データ定義言語)によって宣言された複製オブジェクトクラスは CoreDOではなくUserDOと呼ばれます。CoreDOにはStation 、Session 、 SessionClock などのクラスが含まれます。
qBool nn::nex::DuplicatedObject::IsAUserDO | ( | ) | const |
|
static |
OperationManager へのポインタを取得します。
この関数は、すべてのDOOperation オブジェクトを管理するOperationManager オブジェクトへのポインタを返します。 OperationManager の主な目的は、さまざまなシステム操作の開始と終了時に呼び出されるコールバック関数の管理です。
qBool nn::nex::DuplicatedObject::DeleteMainRef | ( | ) |
複製オブジェクトの主参照を削除するように指示します。
この関数を呼び出すと、複製オブジェクトストアに格納されている 複製オブジェクト主参照(システム参照)を削除します。 オブジェクトの主参照が削除されると、オブジェクトの持つデータセットは更新することをやめ、 イテレーションされている選択からはほどなく見えなくなります。
主参照が唯一の参照であった場合、複製オブジェクトのデストラクタが呼び出され、 この呼び出しによって複製オブジェクトは削除されます。 この複製オブジェクトの複製マスターまたはデュプリカに対する参照がまだ残っている場合 (たとえばRefTemplate によってこのオブジェクトへの参照が存在する場合など)、 デストラクタは最後の参照が解放されるまでは実行されません。 デストラクタが呼び出されたときに、このオブジェクトのすべてのデュプリカは削除されます。
この関数は複製マスターのみが呼び出すことが出来ます。 複製オブジェクトに対してPublish 関数が呼び出されていない状態であっても呼び出すことは可能です。
qBool nn::nex::DuplicatedObject::MainRefIsDeleted | ( | ) | const |
DeleteMainRef 関数がこのオブジェクトに対して呼び出されたかどうかを取得します。
DeleteMainRef 関数が呼び出されたら (つまり、複製オブジェクトの主参照が削除されようとしたら)、 すべての参照が解放されたタイミングでデストラクタが呼ばれます。
true 主参照が削除されたときに返ります。
false 主参照は削除されていないか、エラーが発生した場合に返ります。
|
static |
複製オブジェクトのローカルインスタンスを作成します。
本関数はNULLを返す可能性があります。 NULLが返ってきた場合には速やかにNetZインスタンスを破棄し、セッションから抜けてください。
通常はブロックせずにすぐに値が返されます。 しかし、セッション参加後の複製オブジェクトの初期化処理が完了するよりも前に、 親と通信できなくなったレアなケースではNULLが返り、 このような場合に最大で uiTimeout のブロックが発生することがあります。
uiTimeout に0を指定してノンブロックで本関数を利用することもできます。
この静的関数は、DDL(データ定義言語)コンパイラによって作成される すべての複製オブジェクトクラスごとに定義される関数です。 たとえば、Avatarクラスを作成する場合、Avatar::Create()と呼び出します。 DuplicatedObject::Createという関数はサポートされません。
[in] | uiTimeout | 作成されるのを待つタイムアウトをミリ秒単位で指定します。デフォルトは1000です。 |
|
static |
複製オブジェクトのローカルインスタンスを作成します。
この静的関数は、DDL(データ定義言語)コンパイラによって作成される すべての複製オブジェクトクラスごとに定義される関数です。 たとえば、Avatarクラスを作成する場合、Avatar::Create( idUserDefinedID )と呼び出します。 DuplicatedObject::Createという関数はサポートされません。
このオーバーロードでは明示的に、作成される複製オブジェクトのDOIDを指定します。 この値は、IDGenerator::GenerateID 関数を呼び出すことによって生成されます。 複製オブジェクトクラスごとのIDジェネレータの複製オブジェクトハンドルは、 DDLコンパイラによって自動的に生成されるソースコードの中に実装される、 GetIDGeneratorという関数にて取得することが出来ます。
[in] | idUserDefinedID | 作成する複製オブジェクトのDOID を指定します。 |
|
static |
複製オブジェクトのローカルインスタンスを作成します。
指定された複製オブジェクトクラスID(DOClassID)型の 複製オブジェクトのローカルインスタンスを作成します。 複製オブジェクトクラスIDはDDL(データ定義言語)ファイルによって自動的に生成されます。 したがって、DDLファイルを書き換えてプログラムをリビルドすると値が変化する可能性があることに注意してください。
[in] | idDOClass | 作成する型の複製オブジェクトクラスID |
[in] | uiTimeout | 作成されるのを待つためのタイムアウト時間を指定します。デフォルトでは無期限です。 |
|
static |
複製オブジェクトのローカルインスタンスを作成します。
指定された複製オブジェクトクラスID(DOClassID)型の 複製オブジェクトのローカルインスタンスを作成します。 複製オブジェクトクラスIDはDDL(データ定義言語)ファイルによって自動的に生成されます。 したがって、DDLファイルを書き換えてプログラムをリビルドすると値が変化する可能性があることに注意してください。
このオーバーロードでは明示的に、作成される複製オブジェクトのDOIDを指定します。 この値は、IDGenerator::GenerateID 関数を呼び出すことによって生成されます。 複製オブジェクトクラスごとのIDジェネレータの複製オブジェクトハンドルは、 DDLコンパイラによって自動的に生成されるソースコードの中に実装される、 GetIDGeneratorという関数にて取得することが出来ます。
[in] | idDOClass | 作成する型の複製オブジェクトクラスIDを指定します。 |
[in] | idUserDefinedID | 作成される複製オブジェクトインスタンスIDを指定します。 |
|
static |
|
static |
指定された既知オブジェクトを作成します。
既知オブジェクトとは、セッションが始まるときに参加者に必ず伝わっている複製オブジェクトのことを言います。 セッション中では全ステーションから参照することが出来、事実上のグローバルオブジェクトとして扱うことが出来ます。 たとえば、ゲームが行われている世界の情報(レベル、天候、敵AIの賢さ)など、 ゲームを開始するためには必ず必要となる情報を既知オブジェクトとして扱います。 どの情報を既知オブジェクトとするかはゲームの仕様により異なります。
この関数を利用すると、既知オブジェクトを作成することが出来ます。 すべての既知オブジェクトはセッションが構築される前に作成されている必要があります。 この関数はセッションマスターが呼び出す必要があります。
[in] | hWK | 既知オブジェクトインスタンスへの参照を示すグローバル変数を指定します。 DDLファイルに宣言した名称と同一名でなければなりません。 |
qBool nn::nex::DuplicatedObject::Publish | ( | qUnsignedInt32 | uiTimeout = DEFAULT_PUBLISH_TIMEOUT | ) |
この複製オブジェクトのインスタンスをセッションにいるステーションに発行します。
複製オブジェクトは、作成された後に発行(パブリッシュ)されることで初めて セッション内の他のステーションが感知することが可能になります。
この関数が呼び出されたときに、発行される複製オブジェクトのデータセットが 最新であってほしい場合には、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 |
この関数が発行されたかどうかを取得します。
複製オブジェクトは、作成された後に発行(パブリッシュ)されることで初めて セッション内の他のステーションが感知することが可能になります。
true この複製オブジェクトがすでに発行済みである場合に返ります。
false この複製オブジェクトは正しく発行できていない場合に返ります。
|
static |
複製オブジェクトへのポインタの動的キャストを行います。
指定されたDuplicatedObject*型のポインタを、ランタイム情報を用いて動的にキャストします。 この静的関数はDDL(データ定義言語)コンパイラによって自動的に作成されます。 たとえば、Avatarという名前のクラスをDDLファイルに宣言した場合、 Avatar::DynamicCast関数を呼び出すことで、機能を利用することが出来ます。 DuplicatedObject::DynamicCast関数の直接呼出しはサポートされません。
[in] | pDO | 複製オブジェクトへのポインタを指定します。 |
|
static |
DuplicatedObject::Create で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。
|
static |
DuplicatedObject::Publish で指定されるデフォルトのタイムアウト値です。単位はミリ秒です。