From 5434542877d58ea17a1fadf60fb5a6edc09e2af0 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 21 Oct 2014 17:26:50 -0400 Subject: [PATCH] Retry service resolution --- Limelight/Network/MDNSManager.m | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Limelight/Network/MDNSManager.m b/Limelight/Network/MDNSManager.m index 0feb314..ecc1b2a 100644 --- a/Limelight/Network/MDNSManager.m +++ b/Limelight/Network/MDNSManager.m @@ -61,12 +61,21 @@ static NSString* NV_SERVICE_TYPE = @"_nvstream._tcp"; - (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict { 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 { NSLog(@"Found service: %@", aNetService); [aNetService setDelegate:self]; [aNetService resolveWithTimeout:5]; + + [services removeObject:aNetService]; [services addObject:aNetService]; } @@ -82,12 +91,12 @@ static NSString* NV_SERVICE_TYPE = @"_nvstream._tcp"; // Schedule a retry in 2 seconds [NSTimer scheduledTimerWithTimeInterval:2.0 target:self - selector:@selector(retryTimerCallback:) + selector:@selector(retrySearchTimerCallback:) userInfo:nil repeats:NO]; } -- (void)retryTimerCallback:(NSTimer *)timer { +- (void)retrySearchTimerCallback:(NSTimer *)timer { // Check if we've been stopped since this was queued if (!scanActive) { return; @@ -98,4 +107,19 @@ static NSString* NV_SERVICE_TYPE = @"_nvstream._tcp"; [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 \ No newline at end of file