summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-06 20:22:58 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-14 20:39:01 +0000
commit9fc5a95d9e9cd4172a11efa0a8385e9594f46daa (patch)
treed3445253841d487fa4cc42b357f083e125b59e70 /android/src
parenta2f07fc67160f1d5255de25df543612edda3a305 (diff)
downloadmullvadvpn-9fc5a95d9e9cd4172a11efa0a8385e9594f46daa.tar.xz
mullvadvpn-9fc5a95d9e9cd4172a11efa0a8385e9594f46daa.zip
Handle requests to unregister listeners
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt18
1 files changed, 16 insertions, 2 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt
index fdca25b445..0a0c41b42e 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt
@@ -28,6 +28,7 @@ class ServiceEndpoint(
companion object {
sealed class Command {
data class RegisterListener(val listener: Messenger) : Command()
+ data class UnregisterListener(val listenerId: Int) : Command()
}
}
@@ -58,8 +59,14 @@ class ServiceEndpoint(
val voucherRedeemer = VoucherRedeemer(this)
init {
- dispatcher.registerHandler(Request.RegisterListener::class) { request ->
- commands.sendBlocking(Command.RegisterListener(request.listener))
+ dispatcher.apply {
+ registerHandler(Request.RegisterListener::class) { request ->
+ commands.sendBlocking(Command.RegisterListener(request.listener))
+ }
+
+ registerHandler(Request.UnregisterListener::class) { request ->
+ commands.sendBlocking(Command.UnregisterListener(request.listenerId))
+ }
}
}
@@ -108,6 +115,7 @@ class ServiceEndpoint(
registerListener(command.listener)
}
+ is Command.UnregisterListener -> unregisterListener(command.listenerId)
}
}
} catch (exception: ClosedReceiveChannelException) {
@@ -146,6 +154,12 @@ class ServiceEndpoint(
}
}
+ private fun unregisterListener(listenerId: Int) {
+ synchronized(this) {
+ listeners.remove(listenerId)
+ }
+ }
+
private fun newListenerId(): Int {
val listenerId = listenerIdCounter