Retry service resolution

This commit is contained in:
Cameron Gutman 2014-10-21 17:26:50 -04:00
parent 0ccf046c69
commit 5434542877

View File

@ -61,12 +61,21 @@ static NSString* NV_SERVICE_TYPE = @"_nvstream._tcp";
- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict { - (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict {
NSLog(@"Did not resolve address for: %@\n%@", sender, [errorDict description]); NSLog(@"Did not resolve address for: %@\n%@", sender, [errorDict description]);
// Schedule a retry in 2 seconds
[NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(retryResolveTimerCallback:)
userInfo:nil
repeats:NO];
} }
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing { - (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
NSLog(@"Found service: %@", aNetService); NSLog(@"Found service: %@", aNetService);
[aNetService setDelegate:self]; [aNetService setDelegate:self];
[aNetService resolveWithTimeout:5]; [aNetService resolveWithTimeout:5];
[services removeObject:aNetService];
[services addObject:aNetService]; [services addObject:aNetService];
} }
@ -82,12 +91,12 @@ static NSString* NV_SERVICE_TYPE = @"_nvstream._tcp";
// Schedule a retry in 2 seconds // Schedule a retry in 2 seconds
[NSTimer scheduledTimerWithTimeInterval:2.0 [NSTimer scheduledTimerWithTimeInterval:2.0
target:self target:self
selector:@selector(retryTimerCallback:) selector:@selector(retrySearchTimerCallback:)
userInfo:nil userInfo:nil
repeats:NO]; repeats:NO];
} }
- (void)retryTimerCallback:(NSTimer *)timer { - (void)retrySearchTimerCallback:(NSTimer *)timer {
// Check if we've been stopped since this was queued // Check if we've been stopped since this was queued
if (!scanActive) { if (!scanActive) {
return; return;
@ -98,4 +107,19 @@ static NSString* NV_SERVICE_TYPE = @"_nvstream._tcp";
[mDNSBrowser searchForServicesOfType:NV_SERVICE_TYPE inDomain:@""]; [mDNSBrowser searchForServicesOfType:NV_SERVICE_TYPE inDomain:@""];
} }
- (void)retryResolveTimerCallback:(NSTimer *)timer {
// Check if we've been stopped since this was queued
if (!scanActive) {
return;
}
NSLog(@"Retrying mDNS resolution");
for (NSNetService* service in services) {
if (service.hostName == nil) {
[service setDelegate:self];
[service resolveWithTimeout:5];
}
}
}
@end @end