事件框架使用实例

简介: 使用实例 10.6.1 定义事件类型 public class ExampleEventType extends AbstractEventType  {     public static EventType type1 = new ExampleEventType("type1"...

使用实例

10.6.1 定义事件类型

public class ExampleEventType extends AbstractEventType  {

    public static EventType type1 = new ExampleEventType("type1");

    public static EventType type2 = new ExampleEventType("type2");

    public static EventType type2withtarget = new ExampleEventType("type2 with target");   

    public ExampleEventType(String eventtype)

    {

       super.eventtype = eventtype;

    }

} 

10.6.2定义事件监听器,实现事件处理方法并注册在事件激发器中

public class ExampleListener implements Listener{

    /**

     * 注册监听器,监听ExampleEventType.type1ExampleEventType.type2两种类型的事件

     * 事件消息可以是本地事件,可以是远程本地消息,也可以是远程消息

     */

    public void init()

    {

       List eventtypes = new ArrayList();

       eventtypes.add(ExampleEventType.type1);

       eventtypes.add(ExampleEventType.type2);

       eventtypes.add(ExampleEventType.type2withtarget);

       //监听器监听的事件消息可以是本地事件,可以是远程本地消息,也可以是远程消息

       //如果不指定eventtypes则监听所有类型的事件消息

       NotifiableFactory.getNotifiable().addListener(this, eventtypes);

       /**

        * 只监听本地消息和本地发布的本地远程消息

        * NotifiableFactory.getNotifiable().addListener(this, eventtypes,Listener.LOCAL);

        * 只监听本地消息和从远程消息广播器发布的远程消息和远程本地消息

        * NotifiableFactory.getNotifiable().addListener(this, eventtypes,Listener.LOCAL_REMOTE);

        * 只监听从远程消息广播器发布的远程消息和远程本地消息

        * NotifiableFactory.getNotifiable().addListener(this, eventtypes,Listener.REMOTE);

        */      

    }

    /**

     * 处理监听到的消息

     */

    public void handle(Event e) {

      

       if(e == null)

           return;

       if(e.getType().equals(ExampleEventType.type1))

       {

           System.out.println("Receive event type is " + e.getType());          

       }

       else if(e.getType().equals(ExampleEventType.type2))

       {

           System.out.println("Receive event type is " + e.getType());

       }

       else if(e.getType().equals(ExampleEventType.type2withtarget))

       {

           System.out.println("Receive event type is " + e.getType() + " from "  + e.getEventTarget());

       }

       else

       {

           System.out.println("Unknown event type :" + e.getType());

       }      

    } 

} 

10.6.3 发布具体的事件消息 

public class ExampleEventPublish {

    public static void publishEventtype1()

    {

       /**

        * 构建事件消息【hello world type2.】,指定了事件的类型为ExampleEventType.type2

        * 默认的事件消息广播途径为Event.REMOTELOCAL,你可以指定自己的事件广播途径

        *  消息只在本地传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的本地消息监听器和本地远程事件监听器

         * Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.LOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器,同时也会直接发送给本地监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTELOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTE);

        */

       Event event = new EventImpl("hello world type1.",ExampleEventType.type1);      

       /**

        * 事件以同步方式传播

        */      

       EventHandle.getInstance().change(event);      

    }   

    public static void publishEventtype2()

    {

       /**

        * 构建事件消息【hello world type2.】,指定了事件的类型为ExampleEventType.type2

        * 默认的事件消息广播途径为Event.REMOTELOCAL,你可以指定自己的事件广播途径

        *  消息只在本地传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的本地消息监听器和本地远程事件监听器

        * Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.LOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器,同时也会直接发送给本地监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTELOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTE);

        */   

       Event event = new EventImpl("hello world type2.",ExampleEventType.type2);

       /**

        * 消息以异步方式传递*/        EventHandle.getInstance().change(event,false);      

    }   

    public static void publishEventtype2Withtarget()

    {

       /**

        * 构建事件消息【hello world type2.】,指定了事件的类型为ExampleEventType.type2withtarget

        * 默认的事件消息广播途径为Event.REMOTELOCAL,你可以指定自己的事件广播途径

   

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器,同时也会直接发送给本地监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTELOCAL);

        *  消息在网络上传播,消息被发送给所有对ExampleEventType.type2类型消息感兴趣的远程消息监听器和本地远程事件监听器

        *  Event event = new EventImpl("hello world type2.",ExampleEventType.type2,Event.REMOTE);

        */EventTarget target = new EventTarget("149.16.20.177",8088);

       Event event = new EventImpl("hello world type2 with target[" + target +"].",

                            ExampleEventType.type2withtarget,

                            target,

                            Event.REMOTE);EventHandle.getInstance().change(event);    }

}

10.6.4运行ExampleEventPublish中发布事件的方法

运行ExampleEventPublish中发布事件的方法,ExampleListener将会监听到其发布的事件,并且调用handle方法处理到监听到的消息。    

public class TestRun {

    public static void main(String args[])

    {

       ExampleListener listener = new ExampleListener();

       //调用init方法注册监听器,这样就能收到事件发布器发布的事件

       listener.init();      

       ExampleEventPublish.publishEventtype1();

       ExampleEventPublish.publishEventtype2();

       ExampleEventPublish.publishEventtype2Withtarget();    }

}

目录
相关文章
|
4月前
|
前端开发 NoSQL 网络协议
Lettuce的特性和内部实现问题之promise注册事件监听器的问题如何解决
Lettuce的特性和内部实现问题之promise注册事件监听器的问题如何解决
|
4月前
|
开发工具 Android开发
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
42 0
|
6月前
|
数据管理 Java
Spigot开发中的事件与监听器的关系
在Spigot插件开发中,监听器(Listener)是一个非常重要的概念。它们允许你捕捉和处理各种游戏事件,使你的插件能够对玩家的行为、游戏环境的变化等做出响应。本文将详细介绍监听器是什么、它们的用途,并通过一个代码示例展示如何使用监听器。
49 0
|
7月前
|
小程序
Uniapp 解决组件在官方文档不支持的事件上,接收小程序原生组件事件
Uniapp 解决组件在官方文档不支持的事件上,接收小程序原生组件事件
105 0
[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。
93 0
activiti 全局流程监听ActivitiEventListener,实现监听不同类型事件,不需要在acitivit中配置任务监听,非常方便
activiti 全局流程监听ActivitiEventListener,实现监听不同类型事件,不需要在acitivit中配置任务监听,非常方便
1185 0
activiti 全局流程监听ActivitiEventListener,实现监听不同类型事件,不需要在acitivit中配置任务监听,非常方便
|
数据库连接
Yii2.0框架中如何进行事件处理?它支持哪些事件?
Yii2.0框架中如何进行事件处理?它支持哪些事件?
203 0
|
JavaScript
WebApi入门第三章(事件介绍及注册事件 )
WebApi入门第三章(事件介绍及注册事件 )
129 0
WebApi入门第三章(事件介绍及注册事件 )
|
测试技术 PHP
Laravel 8 新特性: 动态Blade组件、事件监听器优化、事件测试助手
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
320 0
|
Java 容器 Spring
Spring框架中有哪些不同类型的事件?
Spring框架中有哪些不同类型的事件?
Spring框架中有哪些不同类型的事件?