イベントサービス(イベント)


イベント サービスは、イベントの登録、サブスクリプション、ブロードキャストを通じてイベント メッセージの処理を完了します。その目的は、コードの侵入を減らし、モジュール間のビジネスの結合を減らすことです。イベント メッセージはキューに保存され、マルチスレッド インターフェイスのコールバックがメッセージの実装に使用されます。コンテキスト オブジェクトの送信は、同期処理モードと非同期処理モードの両方をサポートします。

#-------------------------------------
# 框架事件初始化参数
#-------------------------------------

# 默认事件触发模式(不区分大小写),取值范围:NORMAL-同步执行,ASYNC-异步执行,默认为ASYNC
ymp.event.default_mode=

# 事件管理提供者接口实现,默认为net.ymate.platform.core.event.impl.DefaultEventProvider
ymp.event.provider_class=

# 事件线程池初始化大小,默认为Runtime.getRuntime().availableProcessors()
ymp.event.thread_pool_size=

# 事件配置扩展参数,xxx表示自定义参数名称,vvv表示参数值
ymp.event.params.xxx=vvv
YMP コア イベント オブジェクト
れーれー
  • ModuleEvent: モジュール イベント

    APPLICATION_INITED - 框架初始化
    APPLICATION_DESTROYED - 框架销毁
  • : 上記は、YMP フレームワークのコアに含まれるイベント オブジェクトのみです。他のモジュールに含まれるイベント オブジェクトについては、対応するセクションで説明します。ドキュメントの説明;
    イベント サブスクリプション

方法 1: コードを使用してイベント サブスクリプションを手動で完了する

MODULE_INITED - 模块初始化
MODULE_DESTROYED - 模块销毁
自定义事件

YMP的事件对象必须实现IEvent接口的同时需要继承EventContext对象,下面的代码就是一个自定义事件对象:

  • 创建自定义事件对象

    public class DemoEvent extends EventContext<Object, DemoEvent.EVENT> implements IEvent {
    
        public enum EVENT {
            CUSTOM_EVENT_ONE, CUSTOM_EVENT_TWO
        }
    
        public DemoEvent(Object owner, Class<? extends IEvent> eventClass, EVENT eventName) {
            super(owner, eventClass, eventName);
        }
    }

    说明:EventContext的注解中的第一个参数代表事件源对象类型,第二个参数是指定用于事件监听事件名称的枚举类型;

  • 注册自定义事件

    YMP.get().getEvents().registerEvent(DemoEvent.class);
  • 订阅自定义事件

    事件订阅(或监听)需实现IEventListener接口,该接口的handle方法返回值在异步触发模式下将影响事件监听队列是否终止执行,同步触发模式下请忽略此返回值;

    YMP.get().getEvents().registerListener(DemoEvent.class, new IEventListener<DemoEvent>() {
    
        public boolean handle(DemoEvent context) {
            switch (context.getEventName()) {
                case CUSTOM_EVENT_ONE:
                    System.out.println("CUSTOM_EVENT_ONE");
                    break;
                case CUSTOM_EVENT_TWO:
                    System.out.println("CUSTOM_EVENT_TWO");
                    break;
            }
            return false;
        }
    });

    当然,也可以通过@EventRegister

    YMP のイベント オブジェクトは IEvent インターフェイスを実装し、EventContext オブジェクトを継承する必要があります。次のコードはカスタム イベント オブジェクトです:

    カスタム イベント オブジェクトを作成します
  • // 采用默认模式触发事件
    YMP.get().getEvents().fireEvent(new DemoEvent(YMP.get(), DemoEvent.class, DemoEvent.EVENT.CUSTOM_EVENT_ONE));
    
    // 采用异步模式触发事件
    YMP.get().getEvents().fireEvent(Events.MODE.ASYNC, new DemoEvent(YMP.get(), DemoEvent.class, DemoEvent.EVENT.CUSTOM_EVENT_TWO));

    手順: EventContext の注釈の最初のパラメーターはイベント ソース オブジェクトの種類を表し、2 番目のパラメーターはイベント監視のイベント名を指定する列挙型です。イベント
    イベント サブスクリプション (またはリスニング) は、IEventListener インターフェイスを実装する必要があります。このインターフェイスのハンドル メソッドの戻り値は、イベント リスニング キューが非同期トリガー モードで実行を終了するかどうかに影響します。同期トリガー モードでは、この戻り値を無視してください。
  • public static void main(String[] args) throws Exception {
        YMP.get().init();
        try {
            // 注册自定义事件对象
            YMP.get().getEvents().registerEvent(DemoEvent.class);
            // 注册自定义事件监听
            YMP.get().getEvents().registerListener(DemoEvent.class, new IEventListener<DemoEvent>() {
    
                public boolean handle(DemoEvent context) {
                    switch (context.getEventName()) {
                        case CUSTOM_EVENT_ONE:
                            System.out.println("CUSTOM_EVENT_ONE");
                            break;
                        case CUSTOM_EVENT_TWO:
                            System.out.println("CUSTOM_EVENT_TWO");
                            break;
                    }
                    return false;
                }
            });
            // 采用默认模式触发事件
            YMP.get().getEvents().fireEvent(new DemoEvent(YMP.get(), DemoEvent.class, DemoEvent.EVENT.CUSTOM_EVENT_ONE));
            // 采用异步模式触发事件
            YMP.get().getEvents().fireEvent(Events.MODE.ASYNC, new DemoEvent(YMP.get(), DemoEvent.class, DemoEvent.EVENT.CUSTOM_EVENT_TWO));
        } finally {
            YMP.get().destroy();
        }
    }

    もちろん、@EventRegister アノテーションと IEventRegister インターフェイスを通じてカスタム イベントをサブスクライブすることもできます
: イベントがトリガーされたら、サブスクライブ (またはリッスン) してください。コールバックによってイベント インターフェイスが実行される順序は保証できません。
🎜🎜🎜 カスタム イベントをトリガーします。サンプル テスト コード: 🎜🎜🎜rrreee🎜🎜🎜🎜