Миграция RX в сопрограммы - PullRequest
1 голос
/ 06 июня 2019

Я начинаю изучать сопрограммы как этот код будет выглядеть на сопрограммах? Я хотел бы оставить RX и начать использовать сопрограммы

open class DataState<out T>(val newState: T, val oldState: T?, val json: String)
object EventBus {
    private val dataPublisher: MutableMap<String, PublishSubject<DataState<Any>>> = mutableMapOf()

    inline fun <reified T : Any> fire(event: DataState<T>) = fire(T::class.java.name, event)
    fun <T : Any> fire(clazz: Class<T>, event: DataState<T>) = EventBus.fire(clazz.name, event)

    fun <T : Any> fire(className: String, event: DataState<T>) {
        synchronized(this) {
            dataPublisher[className]?.onNext(event)
        }
    }

    inline fun <reified T : Any> on(): Observable<DataState<T>> = on(T::class.java)

    fun <T> on(dataType: Class<T>): Observable<DataState<T>> {

        synchronized(this) {
            var pub = dataPublisher[dataType.name]

            if (pub == null) {
                pub = PublishSubject.create()
                dataPublisher[dataType.name] = pub
            }

            return pub.ofType(DataState::class.java) as Observable<DataState<T>>
        }
    }

    fun reset() {
        synchronized(this) {
            dataPublisher.values.forEach { it.onComplete() }
            dataPublisher.clear()
        }
    }
}

Я действительно понятия не имею, как сделать то же самое с сопрограммами, но я готов предположить, что это будет улучшение. Может ли кто-нибудь показать мне, как это можно сделать с сопрограммами, и объяснить, что лучше в способе сопрограмм?

...