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