Removes is on WiFi check from main queue.

This commit is contained in:
Krunoslav Zaher 2016-04-12 12:17:10 +02:00
parent c193b5db52
commit ceee55e6d9
1 changed files with 10 additions and 2 deletions

View File

@ -9,6 +9,7 @@
#if !RX_NO_MODULE #if !RX_NO_MODULE
import RxSwift import RxSwift
#endif #endif
import Foundation
public enum ReachabilityStatus { public enum ReachabilityStatus {
case Reachable(viaWiFi: Bool) case Reachable(viaWiFi: Bool)
@ -45,12 +46,19 @@ class DefaultReachabilityService
let reachabilityRef = try Reachability.reachabilityForInternetConnection() let reachabilityRef = try Reachability.reachabilityForInternetConnection()
let reachabilitySubject = BehaviorSubject<ReachabilityStatus>(value: .Unreachable) let reachabilitySubject = BehaviorSubject<ReachabilityStatus>(value: .Unreachable)
// so main thread isn't blocked when reachability via WiFi is checked
let backgroundQueue = dispatch_queue_create("reachability.wificheck", DISPATCH_QUEUE_SERIAL)
reachabilityRef.whenReachable = { reachability in reachabilityRef.whenReachable = { reachability in
reachabilitySubject.on(.Next(.Reachable(viaWiFi: reachabilityRef.isReachableViaWiFi()))) dispatch_async(backgroundQueue) {
reachabilitySubject.on(.Next(.Reachable(viaWiFi: reachabilityRef.isReachableViaWiFi())))
}
} }
reachabilityRef.whenUnreachable = { reachability in reachabilityRef.whenUnreachable = { reachability in
reachabilitySubject.on(.Next(.Unreachable)) dispatch_async(backgroundQueue) {
reachabilitySubject.on(.Next(.Unreachable))
}
} }
try reachabilityRef.startNotifier() try reachabilityRef.startNotifier()