@@ -69,7 +69,7 @@ public class DiscoveryService: NSObject {
69
69
70
70
public init ( configuration: DiscoveryConfiguration , netService: NetService ) {
71
71
self . configuration = configuration
72
- self . netService = netService
72
+ self . netService = netService
73
73
super. init ( )
74
74
}
75
75
}
@@ -125,25 +125,25 @@ public class Discovery: NSObject {
125
125
126
126
/// the default search domain, empty string means .local.
127
127
/// Should be sufficient for 99% of the use cases
128
- fileprivate let defaultMDNSDomain = " "
128
+ private let defaultMDNSDomain = " "
129
129
130
130
/// the timeout for resolving a service
131
- fileprivate var serviceResolveTimeout : TimeInterval
131
+ private var serviceResolveTimeout : TimeInterval
132
132
133
133
/// the configurations used for the search
134
- fileprivate var configurations : [ DiscoveryConfiguration ]
134
+ private var configurations : [ DiscoveryConfiguration ]
135
135
136
136
/// the local models to manage the search
137
- fileprivate var items : [ DiscoveryItem ] ?
137
+ private var items : [ DiscoveryItem ] ?
138
138
139
139
/// the delegate
140
140
public weak var delegate : DiscoveryDelegate ?
141
141
142
142
143
143
/// the completion closures
144
- fileprivate var discoverHandler : DiscoveryDiscoverHandler ?
145
- fileprivate var failHandler : DiscoveryFailHandler ?
146
- fileprivate var serviceRemovedHandler : DiscoveryServiceRemovedHandler ?
144
+ private var discoverHandler : DiscoveryDiscoverHandler ?
145
+ private var failHandler : DiscoveryFailHandler ?
146
+ private var serviceRemovedHandler : DiscoveryServiceRemovedHandler ?
147
147
148
148
/// the designated initializer. creates a new discovery for the specified configurations
149
149
///
@@ -186,11 +186,9 @@ public class Discovery: NSObject {
186
186
self . serviceResolveTimeout = serviceResolveTimeout
187
187
}
188
188
189
- // workaround for http://www.openradar.me/28943305, see https://github.com/grandcentrix/GCXMulticastDNSKit/issues/11
189
+ // sanity workaround for http://www.openradar.me/28943305, also see https://github.com/grandcentrix/GCXMulticastDNSKit/issues/11
190
190
deinit {
191
- _ = items? . map {
192
- $0. netServiceBrowser. delegate = nil
193
- }
191
+ stopSearchingAndResolving ( )
194
192
}
195
193
196
194
/// starts the discovery process
@@ -209,55 +207,60 @@ public class Discovery: NSObject {
209
207
extension Discovery {
210
208
211
209
/// creates the models from the configurations and starts the search for the services
212
- fileprivate func initializeItems( ) {
210
+ private func initializeItems( ) {
213
211
items = configurations. map {
214
- let item = DiscoveryItem ( with: $0)
212
+ let item = DiscoveryItem ( with: $0)
215
213
item. netServiceBrowser. delegate = self
216
214
item. netServiceBrowser. searchForServices ( ofType: item. configuration. serviceType, inDomain: defaultMDNSDomain)
217
215
return item
218
216
}
219
217
}
220
218
221
- /// stops all search and resolve operations
222
- fileprivate func stopSearchingAndResolving( ) {
219
+ /// stops all search and resolve operations, nil out delegates to circumvent http://www.openradar.me/28943305
220
+ private func stopSearchingAndResolving( ) {
223
221
_ = items? . map {
224
222
$0. netServiceBrowser. stop ( )
225
- _ = $0. netServices. map { $0. stop ( ) }
223
+ $0. netServiceBrowser. delegate = nil
224
+ _ = $0. netServices. map {
225
+ $0. stop ( )
226
+ $0. delegate = nil
227
+ }
226
228
}
227
229
228
230
items = nil
229
231
}
230
232
231
233
/// lookup for an item from a net service
232
- fileprivate func item( service: NetService ) -> DiscoveryItem ? {
234
+ private func item( service: NetService ) -> DiscoveryItem ? {
233
235
return items? . first { $0. netServices. contains ( service) }
234
236
}
235
237
236
238
/// lookup for an item from a net service browser
237
- fileprivate func item( serviceBrowser: NetServiceBrowser ) -> DiscoveryItem ? {
239
+ private func item( serviceBrowser: NetServiceBrowser ) -> DiscoveryItem ? {
238
240
return items? . first { $0. netServiceBrowser == serviceBrowser }
239
241
}
240
242
}
241
243
242
244
// MARK: - Delegate notifiction helpers
243
245
extension Discovery {
244
- fileprivate func notifyDiscoveryDidDiscover( service: DiscoveryService ) {
246
+
247
+ private func notifyDiscoveryDidDiscover( service: DiscoveryService ) {
245
248
DispatchQueue . main. async { [ weak self] ( ) -> Void in
246
249
guard let strongSelf = self else { return }
247
250
strongSelf. delegate? . discoveryDidDiscover ( service: service)
248
251
strongSelf. discoverHandler ? ( service)
249
252
}
250
253
}
251
254
252
- fileprivate func notifyDiscoveryDidFail( configuration: DiscoveryConfiguration , error: DiscoveryError ) {
255
+ private func notifyDiscoveryDidFail( configuration: DiscoveryConfiguration , error: DiscoveryError ) {
253
256
DispatchQueue . main. async { [ weak self] ( ) -> Void in
254
257
guard let strongSelf = self else { return }
255
258
strongSelf. delegate? . discoveryDidFail ( configuration: configuration, error: error)
256
259
strongSelf. failHandler ? ( configuration, error)
257
260
}
258
261
}
259
262
260
- fileprivate func notifyDiscoveryServiceDidDisappear( service: DiscoveryService ) {
263
+ private func notifyDiscoveryServiceDidDisappear( service: DiscoveryService ) {
261
264
DispatchQueue . main. async { [ weak self] ( ) -> Void in
262
265
guard let strongSelf = self else { return }
263
266
strongSelf. delegate? . discoveryDidDisappear ( service: service)
0 commit comments