diff --git a/app/src/main/kotlin/jackall/moncalc/utils/RxBus.kt b/app/src/main/kotlin/jackall/moncalc/utils/RxBus.kt new file mode 100644 index 0000000..8dceef1 --- /dev/null +++ b/app/src/main/kotlin/jackall/moncalc/utils/RxBus.kt @@ -0,0 +1,48 @@ +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 by lazy { + HashMap() + } + + val bus = (PublishSubject.create()).toSerialized() + + fun send(event: Any) { + bus.onNext(event) + } + + inline fun observe(): Observable { + 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) +} \ No newline at end of file