Add Random and Round Robin policy group types

This commit is contained in:
2dust committed 2026-01-26 20:11:30 +08:00
1 parent a8e09611eb
commit 69e000b23d
11 files changed
+71 -24

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,42 +840,32 @@ 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 lstSelector = listOf("proxy-")
when (config.policyGroupType) {
// Least Ping goto else
"1" -> {
// Least Load
val balancer = V2rayConfig.RoutingBean.BalancerBean(
tag = "proxy-round",
selector = listOf("proxy-"),
strategy = V2rayConfig.RoutingBean.StrategyObject(
type = "leastPing"
)
)
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-"),
tag = AppConfig.TAG_BALANCER,
selector = lstSelector,
strategy = V2rayConfig.RoutingBean.StrategyObject(
type = "leastLoad"
)
)
v2rayConfig.routing.balancers = listOf(balancer)
v2rayConfig.burstObservatory = V2rayConfig.BurstObservatoryObject(
subjectSelector = listOf("proxy-"),
subjectSelector = lstSelector,
pingConfig = V2rayConfig.BurstObservatoryObject.PingConfigObject(
destination = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL) ?: AppConfig.DELAY_TEST_URL,
interval = "5m",
@@ -884,21 +874,59 @@ object V2rayConfigManager {
)
)
}
"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">