addBalancer method
Register an Xray balancer. selector contains outbound tag prefixes.
For leastLoad you may also need a burstObservatory section; pass it via setSection('burstObservatory', ...).
Implementation
V2RayConfigBuilder addBalancer({
required String tag,
required List<String> selector,
String strategy = 'roundRobin',
Map<String, dynamic>? strategySettings,
}) {
if (tag.trim().isEmpty || selector.isEmpty) {
throw ArgumentError('Balancer tag and selector cannot be empty');
}
final routing = _mapSection('routing');
final balancers =
routing.putIfAbsent('balancers', () => <Map<String, dynamic>>[]);
if (balancers is! List) {
throw StateError('routing.balancers must be a JSON array');
}
if (balancers.any((item) => item is Map && item['tag'] == tag)) {
throw ArgumentError('Duplicate balancer tag: $tag');
}
balancers.add({
'tag': tag,
'selector': List<String>.of(selector),
'strategy': {
'type': strategy,
if (strategySettings != null)
'settings': _cloneMap(strategySettings),
},
});
return this;
}