summaryrefslogtreecommitdiffhomepage
path: root/android/lib
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2023-10-03 15:49:11 +0200
committerAlbin <albin@mullvad.net>2023-10-16 17:09:22 +0200
commit05a0a17332fe09ccea78eefcb323773732160ae0 (patch)
tree1a07755a52b925a4726ea5aabb729b9cbee17891 /android/lib
parentdc70ef89771a89d1b978516e3415ddf5d50cc033 (diff)
downloadmullvadvpn-05a0a17332fe09ccea78eefcb323773732160ae0.tar.xz
mullvadvpn-05a0a17332fe09ccea78eefcb323773732160ae0.zip
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.kt7
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")
}