package jackall.moncalc.utils
import io.reactivex.Observable
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.disposables.Disposable
import io.reactivex.subjects.PublishSubject
/**
* Created by matsumoto_k on 2017/11/05.
*/
object RxBus {
private val subscriptionsMap: HashMap<Any, CompositeDisposable> by lazy {
HashMap<Any, CompositeDisposable>()
}
val bus = (PublishSubject.create<Any>()).toSerialized()
fun send(event: Any) {
bus.onNext(event)
}
inline fun <reified eventType : Any> observe(): Observable<eventType> {
return bus.ofType(eventType::class.java)
}
fun unregister(subscriber: Any) {
val compositeSubscription = subscriptionsMap[subscriber]
if (compositeSubscription == null) {
} else {
compositeSubscription.clear()
subscriptionsMap.remove(subscriber)
}
}
internal fun register(subscriber: Any, subscription: Disposable) {
var compositeDisposable = subscriptionsMap[subscriber]
if (compositeDisposable == null) {
compositeDisposable = CompositeDisposable()
}
compositeDisposable.add(subscription)
subscriptionsMap[subscriber] = compositeDisposable
}
}
fun Disposable.registerInBus(subscriber: Any) {
RxBus.register(subscriber, this)
}