Commit e6433c28 authored by Mygod's avatar Mygod

Refine performance of DefaultNetworkListener

parent 9f240ec3
...@@ -30,14 +30,13 @@ import androidx.core.content.getSystemService ...@@ -30,14 +30,13 @@ import androidx.core.content.getSystemService
import com.crashlytics.android.Crashlytics import com.crashlytics.android.Crashlytics
import com.github.shadowsocks.Core.app import com.github.shadowsocks.Core.app
import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.channels.actor import kotlinx.coroutines.channels.actor
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import java.net.UnknownHostException import java.net.UnknownHostException
object DefaultNetworkListener : CoroutineScope { object DefaultNetworkListener {
override val coroutineContext get() = Dispatchers.Default
private sealed class NetworkMessage { private sealed class NetworkMessage {
class Start(val key: Any, val listener: (Network?) -> Unit) : NetworkMessage() class Start(val key: Any, val listener: (Network?) -> Unit) : NetworkMessage()
class Get : NetworkMessage() { class Get : NetworkMessage() {
...@@ -49,7 +48,7 @@ object DefaultNetworkListener : CoroutineScope { ...@@ -49,7 +48,7 @@ object DefaultNetworkListener : CoroutineScope {
class Update(val network: Network) : NetworkMessage() class Update(val network: Network) : NetworkMessage()
class Lost(val network: Network) : NetworkMessage() class Lost(val network: Network) : NetworkMessage()
} }
private val networkActor = actor<NetworkMessage> { private val networkActor = GlobalScope.actor<NetworkMessage>(Dispatchers.Unconfined) {
val listeners = mutableMapOf<Any, (Network?) -> Unit>() val listeners = mutableMapOf<Any, (Network?) -> Unit>()
var network: Network? = null var network: Network? = null
val pendingRequests = arrayListOf<NetworkMessage.Get>() val pendingRequests = arrayListOf<NetworkMessage.Get>()
......
...@@ -73,7 +73,7 @@ class LocalDnsServer(private val localResolver: suspend (String) -> Array<InetAd ...@@ -73,7 +73,7 @@ class LocalDnsServer(private val localResolver: suspend (String) -> Array<InetAd
private val monitor = ChannelMonitor() private val monitor = ChannelMonitor()
private val job = SupervisorJob() private val job = SupervisorJob()
override val coroutineContext = Dispatchers.Default + job + CoroutineExceptionHandler { _, t -> printLog(t) } override val coroutineContext = job + CoroutineExceptionHandler { _, t -> printLog(t) }
suspend fun start(listen: SocketAddress) = DatagramChannel.open().apply { suspend fun start(listen: SocketAddress) = DatagramChannel.open().apply {
configureBlocking(false) configureBlocking(false)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment