前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFYDistributer
イベントを配信するクラスです。
#include <SFYDistributer.h.hpp>
class SFYDistributer;
SFMTYPEDEFCLASS(SFYDistributer)

協調図

SFYDistributer クラスの協調図

解説

SFYDistributer クラス(配信エンジン)は、 イベントトレーサの配信規則に基づいてレスポンダツリー上のレスポンダに配信するためのクラスです。

[Note] 注意

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);
        ...
    }
}

例 879. レスポンダツリーを破棄する

SFYDistributer _distributer;
SFZRootSmp _root;

...

// レスポンダツリーを破棄してから、SFYDistributer インスタンスを破棄する
_root.Release();
_distributer.Terminate();

例 880. レスポンダツリーにイベントを配信する

SFZRootSmp _root;
SFXEvent event;
SFCError error;

...

// レスポンダツリーにイベントを配信するにはルートレスポンダの Distribute 関数を呼び出す
error = _root->Distribute(event);

参照

配信エンジン | イベント | トレーサ | レスポンダツリー | ルートレスポンダ | ルート(基礎編) | 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 )
トレーサの登録を解除します。

SFYDistributer::SFYDistributer
SFYDistributer クラスのコンストラクタです。
[ public, explicit ]
SFYDistributer(Void);

SFYDistributer::~SFYDistributer
SFYDistributer クラスのデストラクタです。
[ public ]
~SFYDistributer(Void);

SFYDistributer::ClearHandler
SFYDistributer インスタンスのハンドラの登録をすべて解除します。
[ public ]
Void ClearHandler(Void);

解説

この SFYDistributer インスタンスのハンドラの登録をすべて解除します。

参照

SFYDistributer::RegisterHandler | SFYDistributer::UnregisterHandler | SFYDistributer | ハンドラ


SFYDistributer::ClearTracer
SFYDistributer インスタンスのトレーサの配信規則の登録をすべて解除します。
[ public ]
Void ClearTracer(Void);

解説

この SFYDistributer インスタンスのトレーサの配信規則の登録をすべて解除します。

参照

SFYDistributer::RegisterTracer | SFYDistributer::UnregisterTracer | SFYDistributer | トレーサ


SFYDistributer::Initialize
初期化処理を行います。
[ public ]
SFCError Initialize(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

配信エンジンの初期化処理を行います。

[Tip] 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 |

参照

SFYDistributer::Terminate 配信エンジン | レスポンダツリー


SFYDistributer::RegisterHandler
指定されたハンドラをこの SFYDistributer インスタンスに登録します。
[ 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                        // 配列の要素数
);

引数

range

ハンドラ規則が適用されるイベントの範囲を表します。

rule

ハンドラ関数とリファレンス値のセットを表します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • range / rule / reference 引数が null であるとき: SFERR_INVALID_PARAM
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、 指定されたハンドラをこの SFYDistributer インスタンスに登録します。

同一のイベントに対して複数のハンドラを登録することも可能です。 このとき、ハンドラは登録順または逆順で呼び出されます。 また、ハンドラがイベントを処理したとき、 そこで終了する、 あるいは、無くなるまでハンドラの呼び出しを継続する、 設定によりどちらも可能です。

[Caution] 標準トレーサに『配信条件: なし[SFYTracer::STATE_NONE]』で配信規則が登録されている BREW イベントを受信する方法

標準トレーサに『配信条件: なし[SFYTracer::STATE_NONE]』 で配信規則が登録されているBREW イベントは、 SFYApplication が内部で保持するルートを含めレスポンダには配信されません。

これは標準トレーサの配信規則が SFYDistributer インスタンスに登録されているからです。

このイベントは、 直接 SFYDistributer インスタンスにハンドラを登録して受信します。 具体的には以下の方法で行います。

  1. SFYApplication::GetDistributer 関数を使用して SFYDistributer のインスタンスを取得します。
  2. SFYDistributer::RegisterHandler 関数を使用してハンドラを登録します。
  3. ハンドラはどのクラスに定義してもかまいませんが、 この場合、invoker 引数には null が渡される点に注意してください。

使用例

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 | ハンドラ | 標準トレーサ


SFYDistributer::RegisterTracer
指定された配信規則をこの SFYDistributer インスタンスのトレーサに登録します。
[ 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                        // 配列の要素数
);

引数

range

トレーサ規則が適用されるイベントの範囲を表します。

rule

配信順序と配信条件と重複条件のセットを表します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • range / order / state / overload 引数が null であるとき: SFERR_INVALID_PARAM
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、 指定された配信規則をこの 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 | トレーサ


SFYDistributer::Terminate
終了処理を行います。
[ public ]
Void Terminate(Void);

解説

配信エンジンの終了処理を行います。

[Note] 注意
配信エンジンがレスポンダツリーに関連付けられている場合、 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

参照

SFYDistributer::Initialize | 配信エンジン | レスポンダツリー | ルート


SFYDistributer::UnregisterHandler
ハンドラの登録を解除します。
[ 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                        // 配列の要素数
);

引数

range

ハンドラ規則が適用されるイベントの範囲を表します。

rule

ハンドラ関数とリファレンス値のセットを表します。

解説

引数に指定された、この SFYDistributer インスタンスのハンドラの登録を解除します。

登録が解除されるハンドラは、イベント範囲とハンドラ規則が完全に一致するものに限ります。

同じ条件のハンドラが複数個登録されているときは、最後に登録されたハンドラが解除されます。

参照

SFYDistributer::RegisterHandler | SFYDistributer::ClearHandler | SFYDistributer | SFXEvent | SFXEventRange | ハンドラ


SFYDistributer::UnregisterTracer
トレーサの登録を解除します。
[ public ]
Void UnregisterTracer(
    SFXEventRangeConstRef range   // イベント範囲
);
[ public ]
Void UnregisterTracer(
    SFXEventRangeConstPtr range   // イベント範囲の配列
    SInt32 length                 // 配列の要素数
);

引数

range

トレーサ規則が適用されるイベントの範囲を表します。

解説

引数に指定された、この SFYDistributer インスタンスのトレーサの配信規則の登録を解除します。

登録が解除されるトレーサの配信規則は、イベント範囲が完全に一致するものに限ります。

同じ条件の配信規則が複数個登録されているときは、 最後に登録された配信規則が解除されます。

参照

SFYDistributer::RegisterTracer | SFYDistributer::ClearTracer SFYDistributer | SFXEvent | SFXEventRange | トレーサ