diff options
| author | Albin <albin@mullvad.net> | 2023-10-16 17:10:31 +0200 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2023-10-16 17:10:31 +0200 |
| commit | d32b6f81ceb8c383588678e8fbabe613fbac4142 (patch) | |
| tree | 2a33ca74411ee5208619d763dcde2b21b49988c2 /android/lib | |
| parent | dc70ef89771a89d1b978516e3415ddf5d50cc033 (diff) | |
| parent | 989f57e29d1f694d8bfda186d52697aaf85dcae4 (diff) | |
| download | mullvadvpn-d32b6f81ceb8c383588678e8fbabe613fbac4142.tar.xz mullvadvpn-d32b6f81ceb8c383588678e8fbabe613fbac4142.zip | |
Merge branch 'expose-flexible-ipc-message-handling'
Diffstat (limited to 'android/lib')
| -rw-r--r-- | android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt index 7f6195c61e..dd73f3c156 100644 --- a/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt +++ b/android/lib/ipc/src/main/kotlin/net/mullvad/mullvadvpn/lib/ipc/DispatchingHandler.kt @@ -7,12 +7,18 @@ import android.util.Log import java.util.concurrent.locks.ReentrantReadWriteLock import kotlin.concurrent.withLock import kotlin.reflect.KClass +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.asSharedFlow class DispatchingHandler<T : Any>(looper: Looper, private val extractor: (Message) -> T?) : Handler(looper), MessageDispatcher<T> { private val handlers = HashMap<KClass<out T>, (T) -> Unit>() private val lock = ReentrantReadWriteLock() + private val _parsedMessages = MutableSharedFlow<T>(extraBufferCapacity = 1) + val parsedMessages = _parsedMessages.asSharedFlow() + + @Deprecated("Use parsedMessages instead.") override fun <V : T> registerHandler(variant: KClass<V>, handler: (V) -> Unit) { lock.writeLock().withLock { handlers.put(variant) { instance -> @Suppress("UNCHECKED_CAST") handler(instance as V) } @@ -27,6 +33,7 @@ class DispatchingHandler<T : Any>(looper: Looper, private val extractor: (Messag val handler = handlers.get(instance::class) handler?.invoke(instance) + _parsedMessages.tryEmit(instance) } else { Log.e("mullvad", "Dispatching handler received an unexpected message") } |
