diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-06 20:22:58 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-14 20:39:01 +0000 |
| commit | 9fc5a95d9e9cd4172a11efa0a8385e9594f46daa (patch) | |
| tree | d3445253841d487fa4cc42b357f083e125b59e70 /android/src | |
| parent | a2f07fc67160f1d5255de25df543612edda3a305 (diff) | |
| download | mullvadvpn-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.kt | 18 |
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 |
