У меня есть сторонняя библиотека, где вы можете подписаться на некоторую тему , чтобы получать обновления по этой теме (с обратным вызовом). Но проблема в том, что при повторном вызове метода подписки с той же темой предыдущая подписка автоматически заменяется новой.
Теперь я хотел бы заменитьобратный вызов с Flow
. Поэтому я написал следующий код:
val flow: Flow<Message> = callbackFlow {
lib.subscribe(topic) { message -> offer(message) }
awaitClose { lib.unsubscribe(topic) }
}
Но когда я звоню collect
несколько раз, сообщения получает только последний.
Так как же мне этого добиться:
- Наличие нескольких подписок на одну и ту же тему
- Когда последний подписчик закрывает / отменяет подписку, отмените подписку на данную тему.
Я уже посмотрел BroadcastChannel
, но я не смог найти ничего, чтобы решить второе требование. И я только начал изучать Flow
s, так что, возможно, есть какая-то простая оболочка, которую я просто пропустил.