Задать вопрос

Как отслеживать статус подключения к серверу с помощью rxjava в Android?

Имею подключение по websocket

object StompWrapper {
    private var emitter: ObservableEmitter<Event>? = null
    init {
        val client = OkHttpClient.Builder().build()
        val stomp = StompClient(client)
        stomp.connect()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({
                 when (it.type) {
                     Event.Type.OPENED -> {
                         Timber.d("Connect OPENED")
                         isConnected = true
                         emitter?.onNext(Event(Event.Type.OPENED))
                     }
                     Event.Type.CLOSED,
                     Event.Type.ERROR -> {
                         Timber.d("Connect ERROR")
                         isConnected = false
                         emitter?.onNext(Event(Event.Type.ERROR))
                     }
                     else -> {}
              }
         }, { e ->
             Timber.e(e)
         })
    }

    fun status(): Observable<Event> {
        return Observable.create {
            Timber.d("Connect CREATE status $isConnected")
            emitter = it
            if (isConnected) {
                emitter?.onNext(Event(Event.Type.OPENED))
            }
        }
    }
}

Вызываю так
disposable.add(StompWrapper.status().subscribe {
    Timber.d("Connect: %s", it.type)
})

Получается что соединение висит в статическом классе. Это работает если будет один подписчик, если пару раз подписаться то будет срабатывать последняя подписка. Подскажите пожалуйста, как сделать чтобы я в любом месте приложения мог узнать текущий статус соединения с сервером и делать это сколько угодно раз?
  • Вопрос задан
  • 30 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы