Guest User

Untitled

a guest
Jan 20th, 2021
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.10 KB | None | 0 0
  1. class EventBus {
  2.  
  3.     private val map = HashMap<KClass<Event>, PriorityQueue<EventQueueElement>>()
  4.  
  5.     fun dispatchEvent(event: Event){
  6.         val list = map[event::class]
  7.         if(!list.isNullOrEmpty()){
  8.             list.forEach {
  9.                 it.listener.onEvent(event)
  10.             }
  11.         }
  12.     }
  13.  
  14.     fun registerListener(eventListener: Listener, priority: EventPriority){
  15.         val method = eventListener::class.members.first{it.name == "onEvent"}
  16.         @Suppress("UNCHECKED_CAST")
  17.         val eventClass = method.parameters[1].type.classifier as KClass<Event>
  18.         var list = map[eventClass]
  19.         if(list.isNullOrEmpty()){
  20.             list = PriorityQueue<EventQueueElement>()
  21.         }
  22.         list.add(EventQueueElement(eventListener, priority))
  23.         map[eventClass] = list
  24.     }
  25.  
  26.     private class EventQueueElement(val listener: Listener, val priority: EventPriority = EventPriority.NORMAL) : Comparable<EventQueueElement>{
  27.         override fun compareTo(other: EventQueueElement): Int {
  28.             return priority.compareTo(other.priority)
  29.         }
  30.     }
  31.  
  32. }
Advertisement
Add Comment
Please, Sign In to add comment