Last active
March 8, 2018 13:03
-
-
Save mlesikov/7bc02b99d9ed12aacd4c55cefad7259a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class PubSubsMessageHandler(val eventBus:EventBus){ | |
fun handleMsg(json:String){ | |
val gson = Gson() | |
val pubSubMsg = gson.fromJson(json, PubSubMessage::class.java) | |
val eventType = eventBus.typeOf(pubSubMsg.event) ?: return | |
val event = gson.fromJson(pubSubMsg.data, eventType) | |
eventBus.publish(event as Event) | |
} | |
data class PubSubMessage(val event:String, val data:String) | |
} | |
interface EventBus{ | |
fun<T> register(eventType: Class<T>, handler: Handler<T>) | |
fun publish(event: Event) | |
fun typeOf(eventName: String): Class<*>? | |
} | |
class MyEventBus:EventBus{ | |
val map = mutableMapOf<String, Handler<Any>>() | |
val types = mutableMapOf<String, Class<*>>() | |
override fun publish(event: Event) { | |
map[event::class.java.simpleName]!!.handle(event) | |
} | |
override fun <T> register(eventType: Class<T>, handler: Handler<T>) { | |
map[eventType.simpleName] = handler as Handler<Any> | |
types[eventType.simpleName] = eventType | |
} | |
override fun typeOf(eventName: String): Class<*>? = types[eventName] | |
} | |
interface Event | |
interface Handler<in T> { | |
fun handle(t: T) | |
} | |
data class SomeEvent(val id:Long) :Event | |
data class AnotherEvent(val id:Long):Event | |
class SomeEventHandler:Handler<SomeEvent> { | |
var event:SomeEvent? = null | |
override fun handle(event:SomeEvent){ | |
this.event = event | |
} | |
} | |
class AnotherEventHandler:Handler<AnotherEvent> { | |
lateinit var event:AnotherEvent | |
override fun handle(event:AnotherEvent){ | |
this.event = event | |
} | |
} | |
} | |
//object PubSubMessageBus { | |
// private val map = mutableMapOf<String, ConsumerV1<Any>>() | |
// | |
// fun publish(event: Any) { | |
// Logger.getLogger(PubSubMessageBus::class.java.simpleName).info("PUBLISHEVENT" + map[event::class.java.name]) | |
// Logger.getLogger(PubSubMessageBus::class.java.simpleName).info("GET EVENT" + map[event::class.java.name]) | |
// map[event::class.java.name]!!.handle(event) | |
// } | |
// | |
// fun <T> listen(eventType: Class<T>, consumer: ConsumerV1<T>) { | |
// Logger.getLogger(PubSubMessageBus::class.java.simpleName).info("AddedEVENT" + eventType) | |
// map.put(eventType.name, consumer as ConsumerV1<Any>) | |
// | |
// } | |
//} | |
// | |
//interface ConsumerV1<in T> { | |
// fun handle(t: T) | |
//} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment