CTR NEX API Reference
nn::nex::CallMethodOperation クラスabstract

このDOOperationは、RMCが複製オブジェクトに対して呼び出されたときに実行されます。 [詳解]

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

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

公開型

enum  Type {
  ChangeMasterStation,
  ChangeDupSet,
  FaultRecovery,
  AddToStore,
  RemoveFromStore,
  CallMethod,
  UpdateDataSet,
  JoinSession,
  JoinStation,
  LeaveStation
}
 システムから呼び出される操作の種類を表す列挙体です。 [詳解]
 

公開メンバ関数

void AttachUserContext (const UserContext &oDelayContext)
 このCallMethodOperationにUserContextをアタッチさせます。 [詳解]
 
DuplicatedObjectGetAssociatedDO () const
 操作に関連付けられている複製オブジェクトへのポインタを取得します。 [詳解]
 
DOHandle GetAssociatedDOHandle () const
 この操作に関連付けられている複製オブジェクトハンドルを取得します。 [詳解]
 
size_t GetAttemptCount ()
 この操作が何回呼び出されたかを取得します。 [詳解]
 
virtual const qCharGetClassNameString () 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
 この操作オブジェクトの種類を返します。 [詳解]
 
UserContextGetUserContext ()
 この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は以下のシーケンスにしたがって呼び出されます。

  • RMCが与えられたステーションから呼び出されます。
  • SafetyExecutive が呼び出され、この操作を実行してもよいのか判定します。問題なければ続行し、問題があればここで終了します。
  • DuplicatedObject::OperationBegin が呼び出されます。
  • RMCが実行されます。
  • DuplicatedObject::OperationEnd が呼び出されます。もしもRMCが後回しにされた場合、 そのときは もう一度呼び出されるときに、操作が始まる前にSafetyExecutive を通過します。

CallMethodOperationの主な目的は、埋め込みRMC呼び出しが戻り値を返すまでデッドロックしないことを確かめることです。 これは、まだ呼び出しの結果を返すための準備が整っていないときにRMCが後回しにされ、 短い時間のあともう一度実行されることでこの目的を達成します。 もしも元のRMCがためられたメッセージを中継したら、そのメッセージが処理されてRMC呼び出しを完了するために、 それまではどんなメッセージも処理されません。

加えてこのクラスは、いつ、どのように、そして誰によってRMCが呼び出したかを制御するためにも利用できます。 すべてのRMCはシステムによって一意に識別されています。 それによって、RMCを呼び出したステーション、あるいは他にRMCが呼び出された状況によってなどから、 RMCが実行したり拒否したりすることができます。

列挙型メンバ詳解

enum nn::nex::Operation::Type
inherited

システムから呼び出される操作の種類を表す列挙体です。

参照
GetType
列挙値
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呼び出しを行ったステーションへの複製オブジェクトハンドルを取得します。

戻り値
RMC呼び出しを行ったステーションへの複製オブジェクトハンドルが返ります。
MethodID nn::nex::CallMethodOperation::GetTargetMethodID ( ) const

RMCのMethodIDを取得します。

DDL(データ定義言語)に定義されているそれぞれのRMC(リモートメソッドコール)は、 システムによって一意なMethodID が割り当てられます。

戻り値
このコンテキストのRMCに対するMethodID が返ります。
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 実行が後回しにされていないことを示します。

参照
PostponeOperation
TimeInterval nn::nex::CallMethodOperation::GetDelay ( ) const

この操作が後回しにされたときの遅延時間を取得します。

遅延時間はPostponeOperation() が実行されたときに設定されます。 デフォルトは0です。

戻り値
この操作の遅延時間がミリ秒単位で返ります。
参照
PostponeOperation, OperationIsPostponed
size_t nn::nex::CallMethodOperation::GetAttemptCount ( )

この操作が何回呼び出されたかを取得します。

カウントは0から始まり、CallMethodOperationの実行が後回しにされて、 再実行されるたびに1ずつインクリメントされます。

戻り値
この操作が呼び出された回数が返ります(カウントは0から始まります)。
参照
PostponeOperation
void nn::nex::CallMethodOperation::AttachUserContext ( const UserContext oDelayContext)

このCallMethodOperationにUserContextをアタッチさせます。

引数
[in]oDelayContextこのオブジェクトにアタッチさせるUserContext への参照を指定します。
参照
GetUserContext
UserContext& nn::nex::CallMethodOperation::GetUserContext ( )

このCallMethodOperationにアタッチされているUserContextを取得します。

AttachUserContext() を呼び出すことによって、UserContext をアタッチできます。

戻り値
このCallMethodOperationにアタッチされているUserContextへの参照が返ります。
SubStreamID nn::nex::CallMethodOperation::GetSubStreamID ( ) const

Reliable通信の場合に、受信時に使われたSubStreamIDを取得します。

戻り値
受信時に利用されたSubStreamID
参照
SubStreamIDDefine, StreamSettings::SetMaxUserReliableSubStreams()
DOHandle nn::nex::DOOperation::GetAssociatedDOHandle ( ) const
inherited

この操作に関連付けられている複製オブジェクトハンドルを取得します。

参照
GetAssociatedDO, DOHandle, DuplicatedObject
戻り値
この操作に関連付けられている複製オブジェクトハンドル(DOHandle ) が返ります。
DOHandle nn::nex::DOOperation::GetOrigin ( ) const
inherited

操作オブジェクトを結果として生じるような呼び出しを行ったステーションへの複製オブジェクトハンドルを取得します。

たとえば、ステーションがDuplicatedObject::FetchDuplica 関数を 呼び出してChangeDupSetOperation 操作を誘発させた場合、 この関数は、DuplicatedObject::FetchDuplica 関数を呼び出した ステーションのDOHandleが返ります。

この関数の典型的な利用例は、SafetyExecutive にて、 そのステーションが操作を実際に行うための権利があるかどうかを判定するために 使用することです。

戻り値
操作オブジェクトを生じさせるような呼び出しを行ったステーションへの複製オブジェクトハンドルが返ります。
参照
SafetyExecutive
DuplicatedObject* nn::nex::DOOperation::GetAssociatedDO ( ) const
inherited

操作に関連付けられている複製オブジェクトへのポインタを取得します。

戻り値
操作に関連付けられている複製オブジェクトへのポインタ(DuplicatedObject)が返ります。
参照
GetAssociatedDOHandle, DuplicatedObject
virtual Type nn::nex::Operation::GetType ( ) const
pure virtualinherited

この操作オブジェクトの種類を返します。

戻り値
この操作オブジェクトインスタンスの種類が返ります。
UserContext nn::nex::Operation::GetUserData ( )
inherited

ユーザー定義値を取得します。

ユーザー定義データは、DataSet::OperationBegin または DuplicatedObject::OperationBegin 関数にて設定(SetUserData)し、 DataSet::OperationEnd またはDuplicatedObject::OperationEnd 関数にて この関数を通じて呼び出して使用するために用意されています。

戻り値
SetUserData でこの操作に設定されたユーザー定義値が返ります。
参照
SetUserData
void nn::nex::Operation::SetUserData ( UserContext  uUserData)
inherited

ユーザー定義値を設定します。

ユーザー定義値は、qUnsignedInt32qReal か、 何かしらのオブジェクトへのポインタです。この関数は、 DataSet::OperationBegin またはDuplicatedObject::OperationBegin 関数にて 呼び出し、ユーザー定義値をセットしたあと、 DataSet::OperationEnd またはDuplicatedObject::OperationEnd 関数にて GetUserData 関数を呼び出してユーザー定義値を取り出して利用することが出来ます。

virtual const qChar* nn::nex::Operation::GetClassNameString ( ) const
pure virtualinherited

この操作オブジェクトのクラス名称を取得します。

戻り値
クラス名称へのポインタが返ります。
static SpecificOperation* nn::nex::Operation::DynamicCast ( Operation pOperation)
staticinherited

ランタイム情報を用いた動的キャストを行います。

この関数はNetZの動的情報を用いて、C++のdynamic_castに相当する機能を提供します。 Operationクラスとその派生クラスのみに利用することが可能です。 この機能を利用するためにRTTIを有効にする必要はありません。

この関数を呼び出すには、キャストしたい対象のクラスにある静的関数を呼び出します。 たとえば、Operation型のポインタpOperationを、AddToStoreOperation 型の ポインタに動的変換するためには、AddToStoreOperation::DynamicCast 関数を利用します。

引数
[in]pOperation変換元の操作オブジェクトへのポインタを指定します。
戻り値
動的キャストされたポインタが返ります。
戻り値一覧:
NULL 指定されたpOperationがNULLである場合、 あるいは、pOperationがキャスト対象のクラスインスタンスではなかったときに返ります。
static void nn::nex::Operation::SetTraceFilter ( qBool(*)(const Operation *)  pfTraceFilter)
staticinherited

操作オブジェクトのトレース実行をどのタイミングで実行するかを指定するためのコールバック関数を設定します。

これで指定されたコールバック関数は、システム側から呼びだされ、 TraceLog でトレースすべき操作かどうかを指定します。 指定されたコールバック関数は、トレース対象となっている操作オブジェクトのポインタとともに 呼び出され、qBool値を返します。これがtrueであればトレースを行い、 falseであればトレースを行いません。

TraceLogにトレースフラグをセットしたあとで、 この関数を利用して操作ごとのフィルタコールバックを設定します。 もしなにも設定されていなければ、 CoreDO(システム側で自動的に用意される複製オブジェクト。たとえばStation, Session など。)を 除くすべての複製オブジェクト(つまり、UserDO)に対してトレースが行われるように設定されます。

引数
[in]pfTraceFilterトレースフィルタ用のコールバック関数を指定します。
参照
DuplicatedObject::IsACoreDO, DuplicatedObject::IsAUserDO