このDOOperationは、RMCが複製オブジェクトに対して呼び出されたときに実行されます。 [詳解]
#include <NetZ/src/Core/DOCore/CallMethodOperation.h>
公開型 | |
enum | Type { ChangeMasterStation, ChangeDupSet, FaultRecovery, AddToStore, RemoveFromStore, CallMethod, UpdateDataSet, JoinSession, JoinStation, LeaveStation } |
システムから呼び出される操作の種類を表す列挙体です。 [詳解] | |
公開メンバ関数 | |
void | AttachUserContext (const UserContext &oDelayContext) |
このCallMethodOperationにUserContextをアタッチさせます。 [詳解] | |
DuplicatedObject * | GetAssociatedDO () const |
操作に関連付けられている複製オブジェクトへのポインタを取得します。 [詳解] | |
DOHandle | GetAssociatedDOHandle () const |
この操作に関連付けられている複製オブジェクトハンドルを取得します。 [詳解] | |
size_t | GetAttemptCount () |
この操作が何回呼び出されたかを取得します。 [詳解] | |
virtual const qChar * | GetClassNameString () const =0 |
この操作オブジェクトのクラス名称を取得します。 [詳解] | |
TimeInterval | GetDelay () const |
この操作が後回しにされたときの遅延時間を取得します。 [詳解] | |
DOHandle | GetOrigin () const |
操作オブジェクトを結果として生じるような呼び出しを行ったステーションへの複製オブジェクトハンドルを取得します。 [詳解] | |
DOHandle | GetSourceStation () const |
RMC呼び出しを行ったステーションへの複製オブジェクトハンドルを取得します。 [詳解] | |
SubStreamID | GetSubStreamID () const |
Reliable通信の場合に、受信時に使われたSubStreamIDを取得します。 [詳解] | |
MethodID | GetTargetMethodID () const |
RMCのMethodIDを取得します。 [詳解] | |
virtual Type | GetType () const =0 |
この操作オブジェクトの種類を返します。 [詳解] | |
UserContext & | GetUserContext () |
このCallMethodOperationにアタッチされているUserContextを取得します。 [詳解] | |
UserContext | GetUserData () |
ユーザー定義値を取得します。 [詳解] | |
qBool | OperationIsPostponed () const |
この操作は後回しにされたかどうかを返します。 [詳解] | |
void | PostponeOperation (TimeInterval tiPostponeDelay) |
操作を後回しにします。 [詳解] | |
void | SetUserData (UserContext uUserData) |
ユーザー定義値を設定します。 [詳解] | |
静的公開メンバ関数 | |
static SpecificOperation * | DynamicCast (Operation *pOperation) |
ランタイム情報を用いた動的キャストを行います。 [詳解] | |
static void | SetTraceFilter (qBool(*pfTraceFilter)(const Operation *)) |
操作オブジェクトのトレース実行をどのタイミングで実行するかを指定するためのコールバック関数を設定します。 [詳解] | |
このDOOperationは、RMCが複製オブジェクトに対して呼び出されたときに実行されます。
CallMethodOperationはRMC(リモートメソッドコール)が呼び出されようとしたときの結果として発生します。 CallMethodOperationは以下のシーケンスにしたがって呼び出されます。
CallMethodOperationの主な目的は、埋め込みRMC呼び出しが戻り値を返すまでデッドロックしないことを確かめることです。 これは、まだ呼び出しの結果を返すための準備が整っていないときにRMCが後回しにされ、 短い時間のあともう一度実行されることでこの目的を達成します。 もしも元のRMCがためられたメッセージを中継したら、そのメッセージが処理されてRMC呼び出しを完了するために、 それまではどんなメッセージも処理されません。
加えてこのクラスは、いつ、どのように、そして誰によってRMCが呼び出したかを制御するためにも利用できます。 すべてのRMCはシステムによって一意に識別されています。 それによって、RMCを呼び出したステーション、あるいは他にRMCが呼び出された状況によってなどから、 RMCが実行したり拒否したりすることができます。
|
inherited |
システムから呼び出される操作の種類を表す列挙体です。
列挙値 | |
---|---|
ChangeMasterStation |
ChangeMasterStationOperation クラスのインスタンスであるときに、この列挙値になります。 |
ChangeDupSet |
ChangeDupSetOperation クラスのインスタンスであるときに、この列挙値になります。 |
FaultRecovery |
FaultRecoveryOperation クラスのインスタンスであるときに、この列挙値になります。 |
AddToStore |
AddToStoreOperation クラスのインスタンスであるときに、この列挙値になります。 |
RemoveFromStore |
RemoveFromStoreOperation クラスのインスタンスであるときに、この列挙値になります。 |
CallMethod |
CallMethodOperation クラスのインスタンスであるときに、この列挙値になります。 |
UpdateDataSet |
UpdateDataSetOperation クラスのインスタンスであるときに、この列挙値になります。 |
JoinSession |
JoinSessionOperation クラスのインスタンスであるときに、この列挙値になります。 |
JoinStation |
JoinStationOperation クラスのインスタンスであるときに、この列挙値になります。 |
LeaveStation |
LeaveStationOperation クラスのインスタンスであるときに、この列挙値になります。 |
DOHandle nn::nex::CallMethodOperation::GetSourceStation | ( | ) | const |
RMC呼び出しを行ったステーションへの複製オブジェクトハンドルを取得します。
MethodID nn::nex::CallMethodOperation::GetTargetMethodID | ( | ) | const |
void nn::nex::CallMethodOperation::PostponeOperation | ( | TimeInterval | tiPostponeDelay | ) |
操作を後回しにします。
埋め込まれたRMC(リモートメソッドコール)のデッドロックを回避するために、 実行する準備が整っておらず、短い時間待ってからもう一度呼び出したい場合には、 元のRMC呼び出しを保留することが出来ます。呼び出しが保留されている間、 もしも元のRMCがためられたメッセージを中継したら、そのメッセージが処理されてRMC呼び出しを完了するために、 それまではどんなメッセージも処理されません。
DOCallContext::Flags のTargetObjectMustBeMasterまたは DOCallContext::Flags のTargetObjectMustHaveAuthorityがセットされている場合でも、 これらのフラグは最初の呼び出しのときのみ、それが正しい状態であると保証します。 したがって、この関数によって実行が後回しにされた場合、 TargetObjectMustBeMasterフラグがセットされていたとしても デュプリカ(DuplicatedObject::IsADuplica)になるなど、 フラグと複製オブジェクトの状態が一致しない可能性もあります(これらは再チェックされません)。
[in] | tiPostponeDelay | 実行を遅延する時間を指定します。 |
qBool nn::nex::CallMethodOperation::OperationIsPostponed | ( | ) | const |
この操作は後回しにされたかどうかを返します。
CallMethodOperationは、PostponeOperation() によって実行を後回しにさせることが出来ます。
true 実行が後回しにされたことを示します。
false 実行が後回しにされていないことを示します。
TimeInterval nn::nex::CallMethodOperation::GetDelay | ( | ) | const |
この操作が後回しにされたときの遅延時間を取得します。
遅延時間はPostponeOperation() が実行されたときに設定されます。 デフォルトは0です。
size_t nn::nex::CallMethodOperation::GetAttemptCount | ( | ) |
この操作が何回呼び出されたかを取得します。
カウントは0から始まり、CallMethodOperationの実行が後回しにされて、 再実行されるたびに1ずつインクリメントされます。
void nn::nex::CallMethodOperation::AttachUserContext | ( | const UserContext & | oDelayContext | ) |
このCallMethodOperationにUserContextをアタッチさせます。
[in] | oDelayContext | このオブジェクトにアタッチさせるUserContext への参照を指定します。 |
UserContext& nn::nex::CallMethodOperation::GetUserContext | ( | ) |
このCallMethodOperationにアタッチされているUserContextを取得します。
AttachUserContext() を呼び出すことによって、UserContext をアタッチできます。
SubStreamID nn::nex::CallMethodOperation::GetSubStreamID | ( | ) | const |
Reliable通信の場合に、受信時に使われたSubStreamIDを取得します。
|
inherited |
この操作に関連付けられている複製オブジェクトハンドルを取得します。
|
inherited |
操作オブジェクトを結果として生じるような呼び出しを行ったステーションへの複製オブジェクトハンドルを取得します。
たとえば、ステーションがDuplicatedObject::FetchDuplica 関数を 呼び出してChangeDupSetOperation 操作を誘発させた場合、 この関数は、DuplicatedObject::FetchDuplica 関数を呼び出した ステーションのDOHandleが返ります。
この関数の典型的な利用例は、SafetyExecutive にて、 そのステーションが操作を実際に行うための権利があるかどうかを判定するために 使用することです。
|
inherited |
操作に関連付けられている複製オブジェクトへのポインタを取得します。
|
pure virtualinherited |
この操作オブジェクトの種類を返します。
|
inherited |
ユーザー定義値を取得します。
ユーザー定義データは、DataSet::OperationBegin または DuplicatedObject::OperationBegin 関数にて設定(SetUserData)し、 DataSet::OperationEnd またはDuplicatedObject::OperationEnd 関数にて この関数を通じて呼び出して使用するために用意されています。
|
inherited |
ユーザー定義値を設定します。
ユーザー定義値は、qUnsignedInt32 かqReal か、 何かしらのオブジェクトへのポインタです。この関数は、 DataSet::OperationBegin またはDuplicatedObject::OperationBegin 関数にて 呼び出し、ユーザー定義値をセットしたあと、 DataSet::OperationEnd またはDuplicatedObject::OperationEnd 関数にて GetUserData 関数を呼び出してユーザー定義値を取り出して利用することが出来ます。
|
pure virtualinherited |
この操作オブジェクトのクラス名称を取得します。
|
staticinherited |
ランタイム情報を用いた動的キャストを行います。
この関数はNetZの動的情報を用いて、C++のdynamic_castに相当する機能を提供します。 Operationクラスとその派生クラスのみに利用することが可能です。 この機能を利用するためにRTTIを有効にする必要はありません。
この関数を呼び出すには、キャストしたい対象のクラスにある静的関数を呼び出します。 たとえば、Operation型のポインタpOperationを、AddToStoreOperation 型の ポインタに動的変換するためには、AddToStoreOperation::DynamicCast 関数を利用します。
[in] | pOperation | 変換元の操作オブジェクトへのポインタを指定します。 |
|
staticinherited |
操作オブジェクトのトレース実行をどのタイミングで実行するかを指定するためのコールバック関数を設定します。
これで指定されたコールバック関数は、システム側から呼びだされ、 TraceLog でトレースすべき操作かどうかを指定します。 指定されたコールバック関数は、トレース対象となっている操作オブジェクトのポインタとともに 呼び出され、qBool値を返します。これがtrueであればトレースを行い、 falseであればトレースを行いません。
TraceLogにトレースフラグをセットしたあとで、 この関数を利用して操作ごとのフィルタコールバックを設定します。 もしなにも設定されていなければ、 CoreDO(システム側で自動的に用意される複製オブジェクト。たとえばStation, Session など。)を 除くすべての複製オブジェクト(つまり、UserDO)に対してトレースが行われるように設定されます。
[in] | pfTraceFilter | トレースフィルタ用のコールバック関数を指定します。 |