123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- //
- // WHPingTester.m
- // BigVPN
- //
- // Created by wanghe on 2017/5/11.
- // Copyright © 2017年 wanghe. All rights reserved.
- //
- #import "WHPingTester.h"
- @interface WHPingTester()<SimplePingDelegate>
- {
- NSTimer* _timer;
- }
- @property(nonatomic, strong) SimplePing* simplePing;
- @property(nonatomic, strong) NSMutableArray<WHPingItem*>* pingItems;
- @end
- @implementation WHPingTester
- - (instancetype) initWithHostName:(NSString*)hostName
- {
- if(self = [super init])
- {
- self.simplePing = [[SimplePing alloc] initWithHostName:hostName];
- self.simplePing.delegate = self;
- self.simplePing.addressStyle = SimplePingAddressStyleAny;
- self.pingItems = [NSMutableArray new];
- }
- return self;
- }
- - (void) startPing
- {
- [self.simplePing start];
-
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- if([self.pingItems count] > 0)
- {
- if(self.delegate!=nil && [self.delegate respondsToSelector:@selector(didPingSucccessWithTime:withError:)])
- {
- [self.delegate didPingSucccessWithTime:0 withError:[NSError errorWithDomain:NSURLErrorDomain code:111 userInfo:nil]];
- }
- }
- });
- }
- - (void) stopPing
- {
- [_timer invalidate];
- _timer = nil;
- [self.simplePing stop];
- }
- - (void) actionTimer
- {
- if (self.countdownTime > 0) {
- _timer = [NSTimer scheduledTimerWithTimeInterval:self.countdownTime target:self selector:@selector(sendPingData) userInfo:nil repeats:YES];
- }
- else
- {
- _timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(sendPingData) userInfo:nil repeats:YES];
- }
- }
- - (void) sendPingData
- {
-
- [self.simplePing sendPingWithData:nil];
-
- }
- #pragma mark Ping Delegate
- - (void)simplePing:(SimplePing *)pinger didStartWithAddress:(NSData *)address
- {
- [self actionTimer];
- }
- - (void)simplePing:(SimplePing *)pinger didFailWithError:(NSError *)error
- {
- HLog(@"ping失败--->%@", error);
- if(self.delegate!=nil && [self.delegate respondsToSelector:@selector(didPingfialewithError:)])
- {
- [self.delegate didPingfialewithError:error];
- }
- }
- - (void)simplePing:(SimplePing *)pinger didSendPacket:(NSData *)packet sequenceNumber:(uint16_t)sequenceNumber
- {
- WHPingItem* item = [WHPingItem new];
- item.sequence = sequenceNumber;
- [self.pingItems addObject:item];
- item.beginDate = [NSDate date];
- }
- - (void)simplePing:(SimplePing *)pinger didFailToSendPacket:(NSData *)packet sequenceNumber:(uint16_t)sequenceNumber error:(NSError *)error
- {
- HLog(@"发包失败--->%@", error);
- if(self.delegate!=nil && [self.delegate respondsToSelector:@selector(didPingSucccessWithTime:withError:)])
- {
- [self.delegate didPingSucccessWithTime:0 withError:error];
- }
- }
- - (void)simplePing:(SimplePing *)pinger didReceivePingResponsePacket:(NSData *)packet sequenceNumber:(uint16_t)sequenceNumber
- {
- [self.pingItems enumerateObjectsUsingBlock:^(WHPingItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
- if(obj.sequence == sequenceNumber)
- {
- if(self.delegate!=nil && [self.delegate respondsToSelector:@selector(didPingSucccessWithTime:withError:)])
- {
- float delayTime = [[NSDate date] timeIntervalSinceDate:obj.beginDate] * 1000;
- [self.delegate didPingSucccessWithTime:delayTime withError:nil];
- }
- [self.pingItems removeObject:obj];
- }
- }];
- }
- - (void)simplePing:(SimplePing *)pinger didReceiveUnexpectedPacket:(NSData *)packet
- {
- }
- @end
- @implementation WHPingItem
- @synthesize beginDate;
- @end
|