Add Random and Round Robin policy group types
This commit is contained in:
1 parent
a8e09611eb
commit
69e000b23d
11 files changed
+82
-35
No files matched your search
@@ -97,6 +97,7 @@ object AppConfig {
|
||||
const val TAG_FRAGMENT = "fragment"
|
||||
const val TAG_DNS = "dns-module"
|
||||
const val TAG_DOMESTIC_DNS = "domestic-dns"
|
||||
const val TAG_BALANCER = "proxy-round"
|
||||
|
||||
/** Network-related constants. */
|
||||
const val UPLINK = "uplink"
|
||||
|
||||
@@ -840,65 +840,93 @@ object V2rayConfigManager {
|
||||
* Configures load balancing settings for the V2ray configuration.
|
||||
*
|
||||
* @param v2rayConfig The V2ray configuration object to be modified with balancing settings
|
||||
* @param config The profile item containing policy group settings
|
||||
*/
|
||||
private fun getBalance(v2rayConfig: V2rayConfig, config: ProfileItem) {
|
||||
try {
|
||||
v2rayConfig.routing.rules.forEach { rule ->
|
||||
if (rule.outboundTag == "proxy") {
|
||||
rule.outboundTag = null
|
||||
rule.balancerTag = "proxy-round"
|
||||
rule.balancerTag = AppConfig.TAG_BALANCER
|
||||
}
|
||||
}
|
||||
|
||||
if (config.policyGroupType == "0") {
|
||||
val balancer = V2rayConfig.RoutingBean.BalancerBean(
|
||||
tag = "proxy-round",
|
||||
selector = listOf("proxy-"),
|
||||
strategy = V2rayConfig.RoutingBean.StrategyObject(
|
||||
type = "leastPing"
|
||||
val lstSelector = listOf("proxy-")
|
||||
when (config.policyGroupType) {
|
||||
// Least Ping goto else
|
||||
"1" -> {
|
||||
// Least Load
|
||||
val balancer = V2rayConfig.RoutingBean.BalancerBean(
|
||||
tag = AppConfig.TAG_BALANCER,
|
||||
selector = lstSelector,
|
||||
strategy = V2rayConfig.RoutingBean.StrategyObject(
|
||||
type = "leastLoad"
|
||||
)
|
||||
)
|
||||
)
|
||||
v2rayConfig.routing.balancers = listOf(balancer)
|
||||
v2rayConfig.observatory = V2rayConfig.ObservatoryObject(
|
||||
subjectSelector = listOf("proxy-"),
|
||||
probeUrl = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL) ?: AppConfig.DELAY_TEST_URL,
|
||||
probeInterval = "3m",
|
||||
enableConcurrency = true
|
||||
)
|
||||
} else {
|
||||
val balancer = V2rayConfig.RoutingBean.BalancerBean(
|
||||
tag = "proxy-round",
|
||||
selector = listOf("proxy-"),
|
||||
strategy = V2rayConfig.RoutingBean.StrategyObject(
|
||||
type = "leastLoad"
|
||||
v2rayConfig.routing.balancers = listOf(balancer)
|
||||
v2rayConfig.burstObservatory = V2rayConfig.BurstObservatoryObject(
|
||||
subjectSelector = lstSelector,
|
||||
pingConfig = V2rayConfig.BurstObservatoryObject.PingConfigObject(
|
||||
destination = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL) ?: AppConfig.DELAY_TEST_URL,
|
||||
interval = "5m",
|
||||
sampling = 2,
|
||||
timeout = "30s"
|
||||
)
|
||||
)
|
||||
)
|
||||
v2rayConfig.routing.balancers = listOf(balancer)
|
||||
v2rayConfig.burstObservatory = V2rayConfig.BurstObservatoryObject(
|
||||
subjectSelector = listOf("proxy-"),
|
||||
pingConfig = V2rayConfig.BurstObservatoryObject.PingConfigObject(
|
||||
destination = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL) ?: AppConfig.DELAY_TEST_URL,
|
||||
interval = "5m",
|
||||
sampling = 2,
|
||||
timeout = "30s"
|
||||
}
|
||||
"2" -> {
|
||||
// Random
|
||||
val balancer = V2rayConfig.RoutingBean.BalancerBean(
|
||||
tag = AppConfig.TAG_BALANCER,
|
||||
selector = lstSelector,
|
||||
strategy = V2rayConfig.RoutingBean.StrategyObject(
|
||||
type = "random"
|
||||
)
|
||||
)
|
||||
)
|
||||
v2rayConfig.routing.balancers = listOf(balancer)
|
||||
}
|
||||
"3" -> {
|
||||
// Round Robin
|
||||
val balancer = V2rayConfig.RoutingBean.BalancerBean(
|
||||
tag = AppConfig.TAG_BALANCER,
|
||||
selector = lstSelector,
|
||||
strategy = V2rayConfig.RoutingBean.StrategyObject(
|
||||
type = "roundRobin"
|
||||
)
|
||||
)
|
||||
v2rayConfig.routing.balancers = listOf(balancer)
|
||||
}
|
||||
else -> {
|
||||
// Default: Least Ping
|
||||
val balancer = V2rayConfig.RoutingBean.BalancerBean(
|
||||
tag = AppConfig.TAG_BALANCER,
|
||||
selector = lstSelector,
|
||||
strategy = V2rayConfig.RoutingBean.StrategyObject(
|
||||
type = "leastPing"
|
||||
)
|
||||
)
|
||||
v2rayConfig.routing.balancers = listOf(balancer)
|
||||
v2rayConfig.observatory = V2rayConfig.ObservatoryObject(
|
||||
subjectSelector = lstSelector,
|
||||
probeUrl = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL) ?: AppConfig.DELAY_TEST_URL,
|
||||
probeInterval = "3m",
|
||||
enableConcurrency = true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (v2rayConfig.routing.domainStrategy == "IPIfNonMatch") {
|
||||
v2rayConfig.routing.rules.add(
|
||||
RulesBean(
|
||||
ip = arrayListOf("0.0.0.0/0", "::/0"),
|
||||
balancerTag = "proxy-round",
|
||||
type = "field"
|
||||
balancerTag = AppConfig.TAG_BALANCER,
|
||||
)
|
||||
)
|
||||
} else {
|
||||
v2rayConfig.routing.rules.add(
|
||||
RulesBean(
|
||||
network = "tcp,udp",
|
||||
balancerTag = "proxy-round",
|
||||
type = "field"
|
||||
balancerTag = AppConfig.TAG_BALANCER,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -399,6 +399,8 @@
|
||||
<string-array name="policy_group_type">
|
||||
<item>Least Ping</item>
|
||||
<item>Least Load</item>
|
||||
<item>Random</item>
|
||||
<item>Round Robin</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="config_backup_options">
|
||||
|
||||
@@ -405,6 +405,8 @@
|
||||
<string-array name="policy_group_type">
|
||||
<item>Least Ping</item>
|
||||
<item>Least Load</item>
|
||||
<item>Random</item>
|
||||
<item>Round Robin</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="config_backup_options">
|
||||
|
||||
@@ -415,6 +415,8 @@
|
||||
<string-array name="policy_group_type">
|
||||
<item>کم ترین پینگ</item>
|
||||
<item>کم ترین بار(لود)</item>
|
||||
<item>تصادفی</item>
|
||||
<item>گردشی</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="config_backup_options">
|
||||
|
||||
@@ -414,6 +414,8 @@
|
||||
<string-array name="policy_group_type">
|
||||
<item>کمترین پینگ</item>
|
||||
<item>کمترین بار(لود)</item>
|
||||
<item>تصادفی</item>
|
||||
<item>گردشی</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="config_backup_options">
|
||||
|
||||
@@ -414,6 +414,8 @@
|
||||
<string-array name="policy_group_type">
|
||||
<item>Наименьшая задержка</item>
|
||||
<item>Наименьшая нагрузка</item>
|
||||
<item>Случайный</item>
|
||||
<item>По очереди</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="config_backup_options">
|
||||
|
||||
@@ -401,6 +401,8 @@
|
||||
<string-array name="policy_group_type">
|
||||
<item>Least Ping</item>
|
||||
<item>Least Load</item>
|
||||
<item>Random</item>
|
||||
<item>Round Robin</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="config_backup_options">
|
||||
|
||||
@@ -406,6 +406,8 @@
|
||||
<string-array name="policy_group_type">
|
||||
<item>最低延迟</item>
|
||||
<item>最稳定</item>
|
||||
<item>随机选择</item>
|
||||
<item>轮询</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="config_backup_options">
|
||||
|
||||
@@ -406,6 +406,8 @@
|
||||
<string-array name="policy_group_type">
|
||||
<item>最低延遲</item>
|
||||
<item>最少卡頓</item>
|
||||
<item>隨機選擇</item>
|
||||
<item>輪詢</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="config_backup_options">
|
||||
|
||||
@@ -419,6 +419,8 @@
|
||||
<string-array name="policy_group_type">
|
||||
<item>Least Ping</item>
|
||||
<item>Least Load</item>
|
||||
<item>Random</item>
|
||||
<item>Round Robin</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="config_backup_options">
|
||||
|
||||
Reference in new issue
Block a user