selectServerByCapacity method
Select server with best capacity
Implementation
Future<PeerId?> selectServerByCapacity(List<SFServerPreference> preferences) async {
if (preferences.isEmpty) return null;
final sorted = preferences.toList()
..sort((a, b) => a.priority.compareTo(b.priority));
PeerId? bestServer;
double bestScore = -1;
for (final pref in sorted) {
if (_isMarkedUnavailable(pref.serverId)) continue;
final capacity = await queryServerCapacity(pref.serverId);
if (capacity == null) {
// A connected server that did not answer the capacity query is
// still reachable; only leave it out of this choice.
if (!_isConnected(pref.serverId)) markServerUnavailable(pref.serverId);
continue;
}
// Calculate score based on available capacity and health
final availablePercent = (capacity.availableStorageBytes / capacity.totalStorageBytes) * 100;
final score = (availablePercent * 0.7) + (capacity.healthScore * 30);
if (score > bestScore) {
bestScore = score;
bestServer = pref.serverId;
}
}
return bestServer;
}