Как обернуть один обратный вызов несколькими потоками - PullRequest
0 голосов
/ 25 октября 2019

У меня есть сторонняя библиотека, где вы можете подписаться на некоторую тему , чтобы получать обновления по этой теме (с обратным вызовом). Но проблема в том, что при повторном вызове метода подписки с той же темой предыдущая подписка автоматически заменяется новой.

Теперь я хотел бы заменитьобратный вызов с Flow. Поэтому я написал следующий код:

val flow: Flow<Message> = callbackFlow {
    lib.subscribe(topic) { message -> offer(message) }
    awaitClose { lib.unsubscribe(topic) }
}

Но когда я звоню collect несколько раз, сообщения получает только последний.

Так как же мне этого добиться:

  • Наличие нескольких подписок на одну и ту же тему
  • Когда последний подписчик закрывает / отменяет подписку, отмените подписку на данную тему.

Я уже посмотрел BroadcastChannel, но я не смог найти ничего, чтобы решить второе требование. И я только начал изучать Flow s, так что, возможно, есть какая-то простая оболочка, которую я просто пропустил.

...