SophiaFramework UNIVERSE 5.3 |
SFYDistributer クラス(配信エンジン)は、 イベントをトレーサの配信規則に基づいてレスポンダツリー上のレスポンダに配信するためのクラスです。
注意 | |
---|---|
SFYDistributer クラスの一部の private 関数は SFYResponder クラス内で利用されます。 一般のアプリ開発で直接操作されることはありません。 また、デフォルトで SFYApplication クラスが SFYDistributer インスタンスを内部的に保持し、 必要な設定や呼び出しを自動的にすべて行いますので、開発者がこのクラスを直接操作する必要はありません。 開発者が新たに別のレスポンダツリーを構築する場合は、 SFYDistributer インスタンスをレスポンダツリーのルートレスポンダに関連付ける必要があります。 |
例 878. 新しいレスポンダツリーを構築する
SFYDistributer _distributer; SFZRootSmp _root; SFCError error; // SFYDistributer インスタンスを初期化する if ((error = _distributer.Initialize()) == SFERR_NO_ERROR) { // レスポンダツリーのルートレスポンダを生成する if ((_root = SFZRoot::NewInstance(&error)) != null) { // ルートレスポンダに SFYDistributer インスタンスを設定する _root->SetDistributer(&_distributer); // その他の初期化処理 _root->SetRealBound(_root->GetSuitableBound()); _root->SetStateVisible(true); ... } }
配信エンジン | イベント | トレーサ | レスポンダツリー | ルートレスポンダ | ルート(基礎編) | SFYResponder | SFYRenderer | SFYApplication | SFZRoot | SFXEvent
コンストラクタ/デストラクタ |
---|
SFYDistributer( Void ) SFYDistributer クラスのコンストラクタです。
|
~SFYDistributer( Void ) SFYDistributer クラスのデストラクタです。
|
パブリック関数 | |
---|---|
Void |
ClearHandler( Void ) SFYDistributer インスタンスのハンドラの登録をすべて解除します。
|
Void |
ClearTracer( Void ) SFYDistributer インスタンスのトレーサの配信規則の登録をすべて解除します。
|
SFCError |
Initialize( Void ) 初期化処理を行います。
|
SFCError |
RegisterHandler(
SFXEventRangeConstRef range
, SFYHandler::RuleRecConstRef rule
) 指定されたハンドラをこの SFYDistributer インスタンスに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstRef range
, SFYHandler::HandlerSPP spp
, VoidPtr reference
) 指定されたハンドラをこの SFYDistributer インスタンスに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::RuleRecConstPtr rule
, SInt32 length
) 指定されたハンドラをこの SFYDistributer インスタンスに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::HandlerSPPConstPtr spp
, VoidPtrConstPtr reference
, SInt32 length
) 指定されたハンドラをこの SFYDistributer インスタンスに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstRef range
, SFYTracer::RuleRecConstRef rule
) 指定された配信規則をこの SFYDistributer インスタンスのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstRef range
, SFYTracer::OrderEnum order
, SFYTracer::StateEnum state
, Bool overload
) 指定された配信規則をこの SFYDistributer インスタンスのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstPtr range
, SFYTracer::RuleRecConstPtr rule
, SInt32 length
) 指定された配信規則をこの SFYDistributer インスタンスのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstPtr range
, SFYTracer::OrderEnumConstPtr order
, SFYTracer::StateEnumConstPtr state
, BoolConstPtr overload
, SInt32 length
) 指定された配信規則をこの SFYDistributer インスタンスのトレーサに登録します。
|
Void |
Terminate( Void ) 終了処理を行います。
|
Void |
UnregisterHandler(
SFXEventRangeConstRef range
, SFYHandler::RuleRecConstRef rule
) ハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstRef range
, SFYHandler::HandlerSPP spp
, VoidPtr reference
) ハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::RuleRecConstPtr rule
, SInt32 length
) ハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::HandlerSPPConstPtr spp
, VoidPtrConstPtr reference
, SInt32 length
) ハンドラの登録を解除します。
|
Void |
UnregisterTracer(
SFXEventRangeConstRef range
) トレーサの登録を解除します。
|
Void |
UnregisterTracer(
SFXEventRangeConstPtr range
, SInt32 length
) トレーサの登録を解除します。
|
[ public, explicit ] SFYDistributer(Void);
[ public ] ~SFYDistributer(Void);
[ public ] Void ClearHandler(Void);
この SFYDistributer インスタンスのハンドラの登録をすべて解除します。
[ public ] Void ClearTracer(Void);
この SFYDistributer インスタンスのトレーサの配信規則の登録をすべて解除します。
[ public ] SFCError Initialize(Void);
配信エンジンの初期化処理を行います。
Tip | |
---|---|
SFYDistributer インスタンスをレスポンダツリーに関連付ける前に、 SFYDistributer::Initialize 関数を呼び出す必要があります。 |
デフォルトの配信エンジンが SFYApplication::SFYApplication コンストラクタ内で初期化されるので、 一般のアプリ開発で SFYDistributer::Initialize 関数を呼び出す必要はありません。
// SFYApplication クラスの定義 class SFYApplication : public SFCApplication { SFMSEALCOPY(SFYApplication) private: SFYDistributer _distributer; // 配信エンジン SFYRenderer _renderer; // 描画エンジン SFZRootSmp _root; // ルート public: ... }; // SFYApplication クラスのコンストラクタの実装 /*protected */SFYApplication::SFYApplication(Void) static_throws { SFCError error; // 初期化処理 if (static_try()) { // 配信エンジンを初期化する static_throw(_distributer.Initialize()); if (static_try()) { // 描画エンジンを初期化する // ※デバイス画面領域(携帯電話の画面領域)がレスポンダ空間として設定される static_throw(_renderer.Initialize()); if (static_try()) { // ルートを作成する if ((_root = SFZRoot::NewInstance(&error)) != null) { // ルートに配信エンジンを登録する _root->SetDistributer(&_distributer); // ルートに描画エンジンを登録する _root->SetRenderer(&_renderer); // レスポンダ空間をルートの実領域に設定する _root->SetRealBound(_root->GetSuitableBound()); // ルートの状態を「可視+活性+操作可能+フォーカス」にまとめて設定する _root->SetState(true, true, true, true); } else { static_throw(error); } } } } }// SFYApplication::SFYApplication //
参照: SFYDistributer::Initialize | SFYRenderer::Initialize | SFZRoot::NewInstance | SFYResponder::SetDistributer | SFYResponder::SetRenderer | SFYResponder::SetRealBound | SFYResponder::SetState |
[ public ] SFCError RegisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::RuleRecConstRef rule // ハンドラ規則 );
[ public ] SFCError RegisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::HandlerSPP spp // ハンドラ関数 VoidPtr reference // リファレンス値 );
[ public ] SFCError RegisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::RuleRecConstPtr rule // ハンドラ規則の配列 SInt32 length // 配列の要素数 );
[ public ] SFCError RegisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::HandlerSPPConstPtr spp // ハンドラ関数の配列 VoidPtrConstPtr reference // リファレンス値の配列 SInt32 length // 配列の要素数 );
ハンドラ規則が適用されるイベントの範囲を表します。
ハンドラ関数とリファレンス値のセットを表します。
この関数は、 指定されたハンドラをこの SFYDistributer インスタンスに登録します。
同一のイベントに対して複数のハンドラを登録することも可能です。 このとき、ハンドラは登録順または逆順で呼び出されます。 また、ハンドラがイベントを処理したとき、 そこで終了する、 あるいは、無くなるまでハンドラの呼び出しを継続する、 設定によりどちらも可能です。
標準トレーサに『配信条件: なし[SFYTracer::STATE_NONE]』で配信規則が登録されている BREW イベントを受信する方法 | |
---|---|
標準トレーサに『配信条件: なし[SFYTracer::STATE_NONE]』 で配信規則が登録されているBREW イベントは、 SFYApplication が内部で保持するルートを含めレスポンダには配信されません。 これは標準トレーサの配信規則が SFYDistributer インスタンスに登録されているからです。 このイベントは、 直接 SFYDistributer インスタンスにハンドラを登録して受信します。 具体的には以下の方法で行います。
|
SFYDistributer _distributer; SFCError error; 1 つのハンドラを登録する error = _distributer.RegisterHandler(SFXEventRange(SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END), XANDLER_INTERNAL(OnKey) ); 複数のハンドラをまとめて登録する static SFXEventRange::AtomRecConst range[] = { { SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END}, { SFEVT_KEY_PRESS, SFEVT_KEY_PRESS, SFP16_BEGIN, SFP16_END}, { SFEVT_KEY_RELEASE, SFEVT_KEY_RELEASE, SFP16_BEGIN, SFP16_END} }; SFYHandler::RuleRec rule[lengthof(range)]; rule[0].spp = XANDLER_FUNCTION(OnKey); rule[0].reference = this; rule[1].spp = XANDLER_FUNCTION(OnKeyPress); rule[1].reference = this; rule[2].spp = XANDLER_FUNCTION(OnKeyRelease); rule[2].reference = this; error = _distributer.RegisterHandler(atomic_cast(range), rule, lengthof(range));
SFYDistributer::UnregisterHandler | SFYDistributer::ClearHandler | SFYApplication::GetDistributer | SFYDistributer | SFXEvent | SFXEventRange | ハンドラ | 標準トレーサ
[ public ] SFCError RegisterTracer( SFXEventRangeConstRef range // イベント範囲 SFYTracer::RuleRecConstRef rule // トレーサ規則 );
[ public ] SFCError RegisterTracer( SFXEventRangeConstRef range // イベント範囲 SFYTracer::OrderEnum order // 処理順序 SFYTracer::StateEnum state // 配信条件 Bool overload // 重複条件 );
[ public ] SFCError RegisterTracer( SFXEventRangeConstPtr range // イベント範囲の配列 SFYTracer::RuleRecConstPtr rule // トレーサ規則の配列 SInt32 length // 配列の要素数 );
[ public ] SFCError RegisterTracer( SFXEventRangeConstPtr range // イベント範囲の配列 SFYTracer::OrderEnumConstPtr order // 配信順序の配列 SFYTracer::StateEnumConstPtr state // 配信条件の配列 BoolConstPtr overload // 重複条件の配列 SInt32 length // 配列の要素数 );
トレーサ規則が適用されるイベントの範囲を表します。
配信順序と配信条件と重複条件のセットを表します。
この関数は、 指定された配信規則をこの SFYDistributer インスタンスのトレーサに登録します。
同一のイベントに対して複数の配信規則を登録できます。 この場合、最後に登録された配信規則だけが有効になります。
SFYDistributer _distributer; SFCError error; 1 つの配信規則をトレーサに登録する error = _distributer.RegisterTracer(SFXEventRange(SFEVT_APP_START, SFEVT_APP_START, SFP16_BEGIN, SFP16_END), SFYTracer::ORDER_BACKWARD, SFYTracer::STATE_ALL, true); 複数の配信規則をまとめてトレーサに登録する static SFXEventRange::AtomRecConst range[] = { { SFEVT_APP_START, SFEVT_APP_START, SFP16_BEGIN, SFP16_END}, { SFEVT_APP_STOP, SFEVT_APP_STOP, SFP16_BEGIN, SFP16_END}, { SFEVT_APP_RESUME, SFEVT_APP_RESUME, SFP16_BEGIN, SFP16_END}, { SFEVT_APP_SUSPEND, SFEVT_APP_SUSPEND, SFP16_BEGIN, SFP16_END} }; static SFYTracer::RuleRecConst rule[lengthof(range)] = { { SFYTracer::ORDER_BACKWARD, SFYTracer::STATE_ALL, true}, { SFYTracer::ORDER_FORWARD, SFYTracer::STATE_ALL, true}, { SFYTracer::ORDER_BACKWARD, SFYTracer::STATE_ALL, true}, { SFYTracer::ORDER_FORWARD, SFYTracer::STATE_ALL, true} }; error = _distributer.RegisterTracer(atomic_cast(range), rule, lengthof(range));
SFYTracer::StateEnum | SFYTracer::OrderEnum | SFYTracer::RuleRec | SFYDistributer::UnregisterTracer | SFYDistributer::ClearTracer | SFYDistributer | SFXEventRange | SFXEvent | SFYTracer | トレーサ
[ public ] Void Terminate(Void);
配信エンジンの終了処理を行います。
注意 | |
---|---|
配信エンジンがレスポンダツリーに関連付けられている場合、 SFYDistributer::Terminate 関数を呼び出す前にそのレスポンダツリー上のレスポンダを解放する必要があります。 |
デフォルトの配信エンジンは SFYApplication::~SFYApplication デストラクタ内で終了されるので、 一般のアプリ開発で SFYDistributer::Terminate 関数を呼び出す必要はありません。
// SFYApplication クラスの定義 class SFYApplication : public SFCApplication { SFMSEALCOPY(SFYApplication) private: SFYDistributer _distributer; // 配信エンジン SFYRenderer _renderer; // 描画エンジン SFZRootSmp _root; // ルート public: ... }; // SFYApplication クラスのデストラクタの実装 /*protected virtual */SFYApplication::~SFYApplication(Void) { // 終了処理(必ず下記の順序で行う) // レスポンダツリーを解放する _root.Release(); // 描画エンジンを終了する _renderer.Terminate(); // 配信エンジンを終了する _distributer.Terminate(); }// SFYApplication::~SFYApplication //
参照: SFXResponderPointer::Release | SFYRenderer::Terminate | SFYDistributer::Terminate
[ public ] Void UnregisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::RuleRecConstRef rule // ハンドラ規則 );
[ public ] Void UnregisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::HandlerSPP spp // ハンドラ関数 VoidPtr reference // リファレンス値 );
[ public ] Void UnregisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::RuleRecConstPtr rule // ハンドラ規則の配列 SInt32 length // 配列の要素数 );
[ public ] Void UnregisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::HandlerSPPConstPtr spp // ハンドラ関数の配列 VoidPtrConstPtr reference // リファレンス値の配列 SInt32 length // 配列の要素数 );
ハンドラ規則が適用されるイベントの範囲を表します。
ハンドラ関数とリファレンス値のセットを表します。
引数に指定された、この SFYDistributer インスタンスのハンドラの登録を解除します。
登録が解除されるハンドラは、イベント範囲とハンドラ規則が完全に一致するものに限ります。
同じ条件のハンドラが複数個登録されているときは、最後に登録されたハンドラが解除されます。
SFYDistributer::RegisterHandler | SFYDistributer::ClearHandler | SFYDistributer | SFXEvent | SFXEventRange | ハンドラ
[ public ] Void UnregisterTracer( SFXEventRangeConstRef range // イベント範囲 );
[ public ] Void UnregisterTracer( SFXEventRangeConstPtr range // イベント範囲の配列 SInt32 length // 配列の要素数 );
トレーサ規則が適用されるイベントの範囲を表します。
引数に指定された、この SFYDistributer インスタンスのトレーサの配信規則の登録を解除します。
登録が解除されるトレーサの配信規則は、イベント範囲が完全に一致するものに限ります。
同じ条件の配信規則が複数個登録されているときは、 最後に登録された配信規則が解除されます。
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |