package com.example.base.common

import io.reactivex.Observable
import io.reactivex.subjects.PublishSubject


/**
 * 描述: 用RxJava实现事件总线(Event Bus)
 * PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者
 *
 */
class RxBus {

    private val bus = PublishSubject.create<Any>()

    // 发送一个新的事件
    fun post(o: Any) {
        bus.onNext(o)
    }

    // 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者
    fun <T : Any> toObservable(eventType: Class<T>): Observable<T> {
        return bus.ofType(eventType)
    }

    companion object {
        val defaultInstance: RxBus by lazy { RxBus() }
    }

}
