소스 검색

fix net service based discovery (FTP/Plex/HTTP) by guarding against starting discovery twice

Tobias Conradi 9 년 전
부모
커밋
85f48bedef

+ 2 - 0
Sources/LocalNetworkConnectivity/ServerDiscovery/VLCLocalNetworkServiceBrowserNetService.h

@@ -23,6 +23,8 @@
 @property (nonatomic, readonly) NSString *serviceType;
 @property (nonatomic, readonly) NSString *domain;
 
+@property (nonatomic, readonly, getter=isDiscovering) BOOL discovering;
+
 @property (nonatomic, readonly) NSMutableArray<NSNetService*> *rawNetServices;
 @property (nonatomic, readonly) NSMutableArray<VLCLocalNetworkServiceNetService*> *resolvedLocalNetworkServices;
 

+ 9 - 0
Sources/LocalNetworkConnectivity/ServerDiscovery/VLCLocalNetworkServiceBrowserNetService.m

@@ -65,10 +65,15 @@
     return self.resolvedLocalNetworkServices.count;
 }
 - (void)startDiscovery {
+    if (self.isDiscovering) {
+        return;
+    }
+    _discovering = YES;
     [self.netServiceBrowser searchForServicesOfType:self.serviceType inDomain:self.domain];
 }
 - (void)stopDiscovery {
     [self.netServiceBrowser stop];
+    _discovering = NO;
 }
 - (id<VLCLocalNetworkService>)networkServiceForIndex:(NSUInteger)index {
     return self.resolvedLocalNetworkServices[index];
@@ -90,6 +95,10 @@
         [self.delegate localNetworkServiceBrowserDidUpdateServices:self];
     }
 }
+- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didNotSearch:(NSDictionary<NSString *,NSNumber *> *)errorDict {
+    APLog(@"bonjour service did not search: %@ %@", browser, errorDict);
+}
+
 
 #pragma mark - NSNetServiceDelegate
 - (void)netServiceDidResolveAddress:(NSNetService *)sender {

+ 2 - 4
Sources/LocalNetworkConnectivity/ServerDiscovery/VLCLocalServerDiscoveryController.m

@@ -66,13 +66,11 @@
     }];
 
 
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netReachabilityChanged) name:kReachabilityChangedNotification object:nil];
+
     _reachability = [Reachability reachabilityForLocalWiFi];
     [_reachability startNotifier];
 
-    [self netReachabilityChanged];
-
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netReachabilityChanged) name:kReachabilityChangedNotification object:nil];
-    
     return self;
 }