diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-06 20:22:00 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-14 20:39:01 +0000 |
| commit | d59aafab601bb23b8f9cba230515df0f024c8627 (patch) | |
| tree | cd582edf4d38bcdd3d612bc72a979f8f59847dfd /android/src | |
| parent | 600b9e7bb7f52acfc326a79c1ea999901e00cd15 (diff) | |
| download | mullvadvpn-d59aafab601bb23b8f9cba230515df0f024c8627.tar.xz mullvadvpn-d59aafab601bb23b8f9cba230515df0f024c8627.zip | |
Replace registration queue with command channel
Diffstat (limited to 'android/src')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/ServiceEndpoint.kt | 26 |
1 files changed, 17 insertions, 9 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 e79482986c..fdca25b445 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 @@ -25,8 +25,14 @@ class ServiceEndpoint( val connectivityListener: ConnectivityListener, context: Context ) { + companion object { + sealed class Command { + data class RegisterListener(val listener: Messenger) : Command() + } + } + private val listeners = mutableMapOf<Int, Messenger>() - private val registrationQueue: SendChannel<Messenger> = startRegistrator() + private val commands: SendChannel<Command> = startRegistrator() internal val dispatcher = DispatchingHandler(looper) { message -> Request.fromMessage(message) @@ -53,13 +59,13 @@ class ServiceEndpoint( init { dispatcher.registerHandler(Request.RegisterListener::class) { request -> - registrationQueue.sendBlocking(request.listener) + commands.sendBlocking(Command.RegisterListener(request.listener)) } } fun onDestroy() { dispatcher.onDestroy() - registrationQueue.close() + commands.close() accountCache.onDestroy() appVersionInfoCache.onDestroy() @@ -90,17 +96,19 @@ class ServiceEndpoint( } } - private fun startRegistrator() = GlobalScope.actor<Messenger>( + private fun startRegistrator() = GlobalScope.actor<Command>( Dispatchers.Default, Channel.UNLIMITED ) { try { - while (true) { - val listener = channel.receive() + for (command in channel) { + when (command) { + is Command.RegisterListener -> { + intermittentDaemon.await() - intermittentDaemon.await() - - registerListener(listener) + registerListener(command.listener) + } + } } } catch (exception: ClosedReceiveChannelException) { // Registration queue closed; stop registrator |
