diff options
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 |
