webRtcPingManager.m 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. //
  2. // webRtcPingManager.m
  3. // 双子星云手机
  4. //
  5. // Created by xd h on 2024/12/24.
  6. //
  7. #import "webRtcPingManager.h"
  8. #import "WHPingTester.h"
  9. @interface webRtcPingManager ()<WHPingDelegate>
  10. {
  11. WHPingTester *whPingTester;
  12. NSInteger pingRoomIndex;//开始ping的第x个机房IP
  13. CGFloat allTimeInPingOneIP;//一个IP ping多少次的总延时
  14. NSInteger pingOneIPNumber;//一个IPping多少次
  15. NSInteger pingOneIPErrorNumber;//一个IP 错了多少次
  16. }
  17. @end
  18. @implementation webRtcPingManager
  19. + (instancetype)shareManager {
  20. static webRtcPingManager *_instance;
  21. static dispatch_once_t onceToken;
  22. dispatch_once(&onceToken, ^{
  23. _instance = [[self alloc] init];
  24. });
  25. return _instance;
  26. }
  27. - (instancetype)init {
  28. if (self = [super init]) {
  29. pingRoomIndex = 0;
  30. //[self registeNotification];
  31. }
  32. return self;
  33. }
  34. #pragma mark ---ping-----站点 判断是否是局域网
  35. - (void)startPingFun
  36. {
  37. allTimeInPingOneIP = 0;
  38. pingOneIPNumber = 0;
  39. pingOneIPErrorNumber = 0;
  40. NSString* roomInternetIp = @"";
  41. NSArray<webrtcServerModel>* webrtcServerList = ksharedAppDelegate.DeviceWebRtcMsgMod.data.webrtcServerList;
  42. if (!webrtcServerList || webrtcServerList.count > pingRoomIndex) {
  43. webrtcServerModel *model = webrtcServerList[pingRoomIndex];
  44. roomInternetIp = model.turnIp;
  45. }
  46. else{//完成遍历了
  47. }
  48. //IP 出错
  49. if(!roomInternetIp || roomInternetIp.length ==0){
  50. return;
  51. }
  52. if (self->whPingTester)
  53. {
  54. [self->whPingTester stopPing];
  55. self->whPingTester = nil;
  56. }
  57. self->whPingTester = [[WHPingTester alloc] initWithHostName:roomInternetIp];
  58. self->whPingTester.delegate = self;
  59. //self->whPingTester.countdownTime = 1; //1秒ping一次
  60. [self->whPingTester startPing];
  61. /// 启动定时器监听 10秒后 whPingTester的状态
  62. KWeakSelf
  63. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  64. if(self->whPingTester){
  65. [weakSelf didGetPingStateIsOK:NO];
  66. }
  67. });
  68. }
  69. #pragma mark ---ping---- 代理回调
  70. - (void)didPingSucccessWithTime:(float)time withError:(NSError*) error
  71. {
  72. HLog(@"time:%f \n error: %@",time,error)
  73. //if(error.code == 111 || time > 1000) //超时或者延时超过100ms,就要记录数据
  74. if(error != nil)
  75. {
  76. pingOneIPErrorNumber += 1;
  77. }
  78. else if(time > 0){
  79. allTimeInPingOneIP += time;
  80. pingOneIPNumber +=1 ;
  81. //[self didGetPingStateIsOK:YES];
  82. //test code
  83. //[self didGetPingStateIsOK:NO];
  84. }
  85. if(pingOneIPErrorNumber == 3){
  86. [self didGetPingStateIsOK:NO];
  87. }
  88. else if (pingOneIPNumber == 10){
  89. [self didGetPingStateIsOK:YES];
  90. }
  91. }
  92. - (void)didPingfialewithError:(NSError*)error
  93. {
  94. HLog(@" error error: %@",error)
  95. pingOneIPErrorNumber += 1;
  96. [self didGetPingStateIsOK:NO];
  97. }
  98. -(void)didGetPingStateIsOK:(BOOL)isOk
  99. {
  100. // self.isPingOk = isOk;
  101. // [self->whPingTester stopPing];
  102. // self->whPingTester = nil;
  103. }
  104. @end