-
Notifications
You must be signed in to change notification settings - Fork 0
rogetsun/EventTimer
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
实现原理: Event事件容器 核心容器为一个Map<String, EventHandlerQueue<EventHandler>>.key:事件名称,value:事件处理器队列 EventHandlerQueue底层用一个ConcurrentLinkedDeque双端队列实现. Timer任务 底层用ScheduledExecutorService实现. 使用时也可以直接用TimerUtil.interval和TimerUtil.timeout传入TimerTask即可 任务默认实现了EventTimeTask,任务内部抛出构造器入参的事件名称. Event使用: 实例化一个EventEmitter,同时要一个EventExecutor.这件事情在EventUtil加载到内存时已经完成. eventEmitter = EventEmitterFactory.getEventEmitter(new EventExecutorImpl()); EventEmitter在事件触发时,从容器中取出事件处理器队列,启动一个线程,交给EventExecutor执行. 所以直接用EventUtil.on(EventName, EventHandlerS)即可. 在触发事件时用EventUtil.trigger(EventName). 20170222: 增加trigger事件时,如果当前事件在on时,增加了分发器EventSpliter, 则根据分发规则生成的key生成或使用已有的单独创建的EventExecutorSplitImpl(底层就是一个单独的ExecutorService)。 20170407: 1、增加事件分级功能。从事件名称上实现。 比如事件名称:"一级事件名@二级事件名@三级事件名" trigger事件时: 如果有"一级事件名@二级事件名@三级事件名"的EventHandler则直接触发,并不再向上广播。 如果没有则看是否有"一级事件名@二级事件名"的EventHandler。依次类推。 2、增加事件一次性转发功能:forwardOnce。 EventUtil.forwardOnce(String:eventName, forwarder:EventOnceForwarder) EventOnceForwarder为一个函数式接口 下次eventName再被触发时,将经过函数式接口EventOnceForwarder.forward()转换触发到返回的结果事件名上。 eg: EventUtil.forwardOnce("IP62", (sourceEventName, data)->{ //todo return distEventName }); 20170714: 1、增加事件拦截转发功能的取消功能。 将EventUtil.forwardOnce()返回一个事件拦截转发器Forwarder。自带取消方法cancel(); 或者通过EventUtil.cancelForward(String:eventName) 返回是否成功取消。不成功的原因只有已经不存在该事件的拦截转发器。 20170930: 1.增加事件分级可以向上广播功能. 采用了不同的时间分隔符 en1|en2可以向上广播.en1@en2出发一次后不会向上广播. 2.增加EventUtil.shutdown()功能. 但是一旦shutdown后尚没有重新启动功能.
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published