Skip to content

Commit fe6c24e

Browse files
committed
Fix ping issues - Add NativePingService fallback and custom test URL support
- Fixed connection latency display (now uses NativePingService as fallback) - Added support for custom connectionTestUrl from settings - Improved reliability: V2Ray Core ping + Native ping fallback - Fixes ping failures in both Servers screen and Home screen
1 parent fc4df4d commit fe6c24e

1 file changed

Lines changed: 54 additions & 2 deletions

File tree

lib/services/v2ray_service.dart

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:zedsecure/models/subscription.dart';
88
import 'package:zedsecure/models/app_settings.dart';
99
import 'package:zedsecure/services/v2ray_config_builder.dart';
1010
import 'package:zedsecure/services/log_service.dart';
11+
import 'package:zedsecure/services/native_ping_service.dart';
1112
import 'package:flutter/foundation.dart';
1213

1314
class V2RayService extends ChangeNotifier {
@@ -586,10 +587,61 @@ class V2RayService extends ChangeNotifier {
586587

587588
Future<int?> getConnectedServerDelay() async {
588589
try {
589-
final delay = await _flutterV2ray.getConnectedServerDelay();
590-
return delay >= 0 ? delay : null;
590+
if (!_isConnected || _activeConfig == null) {
591+
return null;
592+
}
593+
594+
final prefs = await SharedPreferences.getInstance();
595+
final settingsJson = prefs.getString('app_settings');
596+
String testUrl = 'https://www.gstatic.com/generate_204';
597+
598+
if (settingsJson != null) {
599+
try {
600+
final settings = AppSettings.fromJson(jsonDecode(settingsJson));
601+
testUrl = settings.connectionTestUrl;
602+
} catch (e) {
603+
debugPrint('Error loading test URL from settings: $e');
604+
}
605+
}
606+
607+
final delay = await _flutterV2ray.getConnectedServerDelay(url: testUrl);
608+
if (delay >= 0) {
609+
return delay;
610+
}
611+
612+
debugPrint('V2Ray delay failed, trying native ping...');
613+
final pingResult = await NativePingService.pingHost(
614+
host: _activeConfig!.address,
615+
port: _activeConfig!.port,
616+
timeoutMs: 5000,
617+
useCache: false,
618+
);
619+
620+
if (pingResult.success) {
621+
return pingResult.latency;
622+
}
623+
624+
return null;
591625
} catch (e) {
592626
debugPrint('Error getting connected server delay: $e');
627+
628+
if (_activeConfig != null) {
629+
try {
630+
final pingResult = await NativePingService.pingHost(
631+
host: _activeConfig!.address,
632+
port: _activeConfig!.port,
633+
timeoutMs: 5000,
634+
useCache: false,
635+
);
636+
637+
if (pingResult.success) {
638+
return pingResult.latency;
639+
}
640+
} catch (pingError) {
641+
debugPrint('Native ping also failed: $pingError');
642+
}
643+
}
644+
593645
return null;
594646
}
595647
}

0 commit comments

Comments
 (0)