Skip to content

Commit

Permalink
Restart the node in case of app crash (on activity restore)
Browse files Browse the repository at this point in the history
  • Loading branch information
Zensey committed Mar 8, 2023
1 parent fbe9586 commit dbbad6e
Showing 1 changed file with 21 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.*
import updated.mysterium.vpn.core.DeferredNode
import updated.mysterium.vpn.core.MysteriumCoreService
import updated.mysterium.vpn.model.manual.connect.ProviderState
import updated.mysterium.vpn.model.notification.NotificationChannels
Expand Down Expand Up @@ -37,6 +38,7 @@ class ProviderViewModel(useCaseProvider: UseCaseProvider) : ViewModel() {
private var coreService: MysteriumCoreService? = null
private val connectionUseCase = useCaseProvider.connection()
private lateinit var appNotificationManager: AppNotificationManager
private var deferredNode = DeferredNode()

val handler = CoroutineExceptionHandler { _, exception ->
Log.i(TAG, exception.localizedMessage ?: exception.toString())
Expand All @@ -50,6 +52,9 @@ class ProviderViewModel(useCaseProvider: UseCaseProvider) : ViewModel() {
appNotificationManager = notificationManager
coreService = deferredMysteriumCoreService.await()

// Restart a node in case of app crash (on activity restore), thus regaining control of the node
startDeferredNode()

val initialState = ProviderState(
active = getIsProvider(),
)
Expand Down Expand Up @@ -94,7 +99,22 @@ class ProviderViewModel(useCaseProvider: UseCaseProvider) : ViewModel() {
}
}

private suspend fun getIsProvider(): Boolean {
private suspend fun startDeferredNode() {
if (deferredNode.startedOrStarting()) {
coreService?.getDeferredNode()?.let {
deferredNode = it
}
} else {
coreService?.let {
deferredNode.start(it)
}
}

connectionUseCase.initDeferredNode(deferredNode)
connectionUseCase.getIdentity()
}

private fun getIsProvider(): Boolean {
coreService?.let {
return it.isProviderActive()
}
Expand Down

0 comments on commit dbbad6e

Please sign in to comment.