Commit 984a0e8f authored by chenhuaqing's avatar chenhuaqing

code refinement

parent 2677cee4
......@@ -2,10 +2,12 @@ package com.ccwangluo.accelerator.utils
import android.annotation.SuppressLint
import android.content.Context
import android.net.Network
import android.os.RemoteException
import androidx.activity.result.ActivityResultLauncher
import androidx.lifecycle.lifecycleScope
import com.ccnet.acc.NetworkAdapter
import com.ccnet.acc.aidl.NetworkMode
import com.ccwangluo.accelerator.model.Game
import com.ccwangluo.accelerator.model.GameInfo
import com.ccwangluo.accelerator.model.NetState
......@@ -28,12 +30,11 @@ import com.hjq.toast.ToastUtils
import com.xuexiang.xpage.base.XPageActivity
import com.xuexiang.xpage.base.XPageFragment
import com.xuexiang.xutil.common.StringUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlinx.coroutines.*
import timber.log.Timber
import java.net.InetAddress
import java.net.InetSocketAddress
import java.net.Socket
import java.net.SocketAddress
import java.util.concurrent.TimeUnit
......@@ -327,43 +328,39 @@ object AcceleratorUtils {
connection.disconnect(context)
}
private fun testLatency() {
val networkAutoSwitch = false
private suspend fun testLatency() {
val networkAutoSwitch = true // TODO: 根据用户设置测试延迟 ,过高时切换 connection.bindNetwork(NetworkMode.CELLULAR.code)
if (networkAutoSwitch) {
val wifiLatency: Long = NetworkAdapter.wifiNetwork?.let { wifi ->
try {
val pingAddress = wifi.getByName(DataStore.pingNetReachableHost) // DataStore.pingAccHost
val start = System.currentTimeMillis()
pingAddress.isReachable(DataStore.pingTimeoutMillis)
System.currentTimeMillis() - start
} catch (_: Exception) {
-1L
val wifiLatency: Int = doTestLatency(DataStore.pingAccHost, DataStore.pingAccPort, NetworkAdapter.wifiNetwork)
val cellularLatency: Int = doTestLatency(DataStore.pingAccHost, DataStore.pingAccPort, NetworkAdapter.cellularNetwork)
Timber.d("wifi latency: $wifiLatency, cellular latency: $cellularLatency")
} else {
val currentNetworkLatency = doTestLatency(DataStore.pingAccHost, DataStore.pingAccPort, null, true)
Timber.d("network latency: $currentNetworkLatency")
}
}
} ?: -1
val cellularLatency: Long = NetworkAdapter.cellularNetwork?.let { wifi ->
private suspend fun doTestLatency(pingHost: String, pingPort: Int, network: Network?, systemNetwork: Boolean = false): Int {
return withTimeoutOrNull(DataStore.pingTimeoutMillis.toLong()) {
try {
val pingAddress = wifi.getByName(DataStore.pingNetReachableHost) // DataStore.pingAccHost
val start = System.currentTimeMillis()
pingAddress.isReachable(DataStore.pingTimeoutMillis)
System.currentTimeMillis() - start
} catch (_: Exception) {
-1L
val socketAddress: Socket = when {
network != null -> {
network.socketFactory.createSocket()
}
systemNetwork -> {
Socket()
}
else -> {
return@withTimeoutOrNull -1
}
}
} ?: -1
Timber.d("wifi latency: $wifiLatency, cellular latency: $cellularLatency")
} else {
val currentNetworkLatency = try {
val defaultNetAddress = InetAddress.getByName(DataStore.pingNetReachableHost) // DataStore.pingAccHost
val start = System.currentTimeMillis()
defaultNetAddress.isReachable(DataStore.pingTimeoutMillis)
System.currentTimeMillis() - start
socketAddress.connect(InetSocketAddress(pingHost, pingPort), DataStore.pingTimeoutMillis)
(System.currentTimeMillis() - start).toInt()
} catch (_: Exception) {
-1L
}
Timber.d("network latency: $currentNetworkLatency")
-1
}
} ?: -1
}
}
\ No newline at end of file
......@@ -153,4 +153,8 @@ class ShadowsocksConnection(private var listenForDeath: Boolean = false) : Servi
service = null
callback = null
}
fun bindNetwork(networkMode: Int) {
service?.bindNetwork(networkMode)
}
}
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