addBalancer method

V2RayConfigBuilder addBalancer({
  1. required String tag,
  2. required List<String> selector,
  3. String strategy = 'roundRobin',
  4. Map<String, dynamic>? strategySettings,
})

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;
}