Reachability Singleton

pull/1/head
Michael Kirk 7 years ago
parent b8e4bfff86
commit 54c63c7a2e

@ -1108,8 +1108,7 @@ static NSTimeInterval launchStartedAt;
[SSKEnvironment.shared.messageReceiver handleAnyUnprocessedEnvelopesAsync];
[SSKEnvironment.shared.batchMessageProcessor handleAnyUnprocessedEnvelopesAsync];
// TODO
// - incorporate reachability check
[SSKEnvironment.shared.reachabilityManager setup];
[SSKEnvironment.shared.messageSenderJobQueue setup];
[AppEnvironment.shared.sessionResetJobQueue setup];

@ -85,6 +85,7 @@ NS_ASSUME_NONNULL_BEGIN
[[OWSOutgoingReceiptManager alloc] initWithPrimaryStorage:primaryStorage];
OWSSyncManager *syncManager = [[OWSSyncManager alloc] initDefault];
id<SSKReachabilityManager> reachabilityManager = [SSKReachabilityManagerImpl new];
OWSSounds *sounds = [[OWSSounds alloc] initWithPrimaryStorage:primaryStorage];
LockInteractionController *lockInteractionController = [[LockInteractionController alloc] initDefault];
OWSWindowManager *windowManager = [[OWSWindowManager alloc] initDefault];
@ -115,6 +116,7 @@ NS_ASSUME_NONNULL_BEGIN
contactDiscoveryService:contactDiscoveryService
readReceiptManager:readReceiptManager
outgoingReceiptManager:outgoingReceiptManager
reachabilityManager:reachabilityManager
syncManager:syncManager]];
appSpecificSingletonBlock();

@ -0,0 +1,57 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
import Foundation
@objc(SSKReachabilityType)
public enum ReachabilityType: Int {
case any, wifi, cellular
}
@objc
public protocol SSKReachabilityManager {
var observationContext: AnyObject { get }
func setup()
var isReachable: Bool { get }
func isReachable(via reachabilityType: ReachabilityType) -> Bool
}
@objc
public class SSKReachabilityManagerImpl: NSObject, SSKReachabilityManager {
public let reachability: Reachability
public var observationContext: AnyObject {
return self.reachability
}
public var isReachable: Bool {
return isReachable(via: .any)
}
public func isReachable(via reachabilityType: ReachabilityType) -> Bool {
switch reachabilityType {
case .any:
return reachability.isReachable()
case .wifi:
return reachability.isReachableViaWiFi()
case .cellular:
return reachability.isReachableViaWWAN()
}
}
@objc
override public init() {
self.reachability = Reachability.forInternetConnection()
}
@objc
public func setup() {
guard reachability.startNotifier() else {
owsFailDebug("failed to start notifier")
return
}
Logger.debug("started notifier")
}
}

@ -31,6 +31,7 @@ NS_ASSUME_NONNULL_BEGIN
@protocol OWSCallMessageHandler;
@protocol ProfileManagerProtocol;
@protocol OWSUDManager;
@protocol SSKReachabilityManager;
@protocol OWSSyncManagerProtocol;
@interface SSKEnvironment : NSObject
@ -56,6 +57,7 @@ NS_ASSUME_NONNULL_BEGIN
contactDiscoveryService:(ContactDiscoveryService *)contactDiscoveryService
readReceiptManager:(OWSReadReceiptManager *)readReceiptManager
outgoingReceiptManager:(OWSOutgoingReceiptManager *)outgoingReceiptManager
reachabilityManager:(id<SSKReachabilityManager>)reachabilityManager
syncManager:(id<OWSSyncManagerProtocol>)syncManager NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;
@ -91,6 +93,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, readonly) OWSReadReceiptManager *readReceiptManager;
@property (nonatomic, readonly) OWSOutgoingReceiptManager *outgoingReceiptManager;
@property (nonatomic, readonly) id<OWSSyncManagerProtocol> syncManager;
@property (nonatomic, readonly) id<SSKReachabilityManager> reachabilityManager;
// This property is configured after Environment is created.
@property (atomic, nullable) id<OWSCallMessageHandler> callMessageHandler;

@ -33,6 +33,7 @@ static SSKEnvironment *sharedSSKEnvironment;
@property (nonatomic) OWSReadReceiptManager *readReceiptManager;
@property (nonatomic) OWSOutgoingReceiptManager *outgoingReceiptManager;
@property (nonatomic) id<OWSSyncManagerProtocol> syncManager;
@property (nonatomic) id<SSKReachabilityManager> reachabilityManager;
@end
@ -68,6 +69,7 @@ static SSKEnvironment *sharedSSKEnvironment;
contactDiscoveryService:(ContactDiscoveryService *)contactDiscoveryService
readReceiptManager:(OWSReadReceiptManager *)readReceiptManager
outgoingReceiptManager:(OWSOutgoingReceiptManager *)outgoingReceiptManager
reachabilityManager:(id<SSKReachabilityManager>)reachabilityManager
syncManager:(id<OWSSyncManagerProtocol>)syncManager
{
self = [super init];
@ -97,6 +99,7 @@ static SSKEnvironment *sharedSSKEnvironment;
OWSAssertDebug(readReceiptManager);
OWSAssertDebug(outgoingReceiptManager);
OWSAssertDebug(syncManager);
OWSAssertDebug(reachabilityManager);
_contactsManager = contactsManager;
_messageSender = messageSender;
@ -120,6 +123,7 @@ static SSKEnvironment *sharedSSKEnvironment;
_readReceiptManager = readReceiptManager;
_outgoingReceiptManager = outgoingReceiptManager;
_syncManager = syncManager;
_reachabilityManager = reachabilityManager;
return self;
}

@ -3,6 +3,7 @@
//
// Anything used by Swift outside of the framework must be imported.
#import <Reachability/Reachability.h>
#import <SignalServiceKit/OWSFileSystem.h>
#import <SignalServiceKit/OWSOperation.h>
#import <SignalServiceKit/OWSSyncManagerProtocol.h>

@ -73,6 +73,7 @@ NS_ASSUME_NONNULL_BEGIN
OWSReadReceiptManager *readReceiptManager = [[OWSReadReceiptManager alloc] initWithPrimaryStorage:primaryStorage];
OWSOutgoingReceiptManager *outgoingReceiptManager =
[[OWSOutgoingReceiptManager alloc] initWithPrimaryStorage:primaryStorage];
id<SSKReachabilityManager> reachabilityManager = [SSKReachabilityManagerImpl new];
id<OWSSyncManagerProtocol> syncManager = [[OWSMockSyncManager alloc] init];
self = [super initWithContactsManager:contactsManager
@ -96,6 +97,7 @@ NS_ASSUME_NONNULL_BEGIN
contactDiscoveryService:contactDiscoveryService
readReceiptManager:readReceiptManager
outgoingReceiptManager:outgoingReceiptManager
reachabilityManager:reachabilityManager
syncManager:syncManager];
if (!self) {
return nil;

Loading…
Cancel
Save