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.messageReceiver handleAnyUnprocessedEnvelopesAsync];
[SSKEnvironment.shared.batchMessageProcessor handleAnyUnprocessedEnvelopesAsync]; [SSKEnvironment.shared.batchMessageProcessor handleAnyUnprocessedEnvelopesAsync];
// TODO [SSKEnvironment.shared.reachabilityManager setup];
// - incorporate reachability check
[SSKEnvironment.shared.messageSenderJobQueue setup]; [SSKEnvironment.shared.messageSenderJobQueue setup];
[AppEnvironment.shared.sessionResetJobQueue setup]; [AppEnvironment.shared.sessionResetJobQueue setup];

@ -85,6 +85,7 @@ NS_ASSUME_NONNULL_BEGIN
[[OWSOutgoingReceiptManager alloc] initWithPrimaryStorage:primaryStorage]; [[OWSOutgoingReceiptManager alloc] initWithPrimaryStorage:primaryStorage];
OWSSyncManager *syncManager = [[OWSSyncManager alloc] initDefault]; OWSSyncManager *syncManager = [[OWSSyncManager alloc] initDefault];
id<SSKReachabilityManager> reachabilityManager = [SSKReachabilityManagerImpl new];
OWSSounds *sounds = [[OWSSounds alloc] initWithPrimaryStorage:primaryStorage]; OWSSounds *sounds = [[OWSSounds alloc] initWithPrimaryStorage:primaryStorage];
LockInteractionController *lockInteractionController = [[LockInteractionController alloc] initDefault]; LockInteractionController *lockInteractionController = [[LockInteractionController alloc] initDefault];
OWSWindowManager *windowManager = [[OWSWindowManager alloc] initDefault]; OWSWindowManager *windowManager = [[OWSWindowManager alloc] initDefault];
@ -115,6 +116,7 @@ NS_ASSUME_NONNULL_BEGIN
contactDiscoveryService:contactDiscoveryService contactDiscoveryService:contactDiscoveryService
readReceiptManager:readReceiptManager readReceiptManager:readReceiptManager
outgoingReceiptManager:outgoingReceiptManager outgoingReceiptManager:outgoingReceiptManager
reachabilityManager:reachabilityManager
syncManager:syncManager]]; syncManager:syncManager]];
appSpecificSingletonBlock(); 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 OWSCallMessageHandler;
@protocol ProfileManagerProtocol; @protocol ProfileManagerProtocol;
@protocol OWSUDManager; @protocol OWSUDManager;
@protocol SSKReachabilityManager;
@protocol OWSSyncManagerProtocol; @protocol OWSSyncManagerProtocol;
@interface SSKEnvironment : NSObject @interface SSKEnvironment : NSObject
@ -56,6 +57,7 @@ NS_ASSUME_NONNULL_BEGIN
contactDiscoveryService:(ContactDiscoveryService *)contactDiscoveryService contactDiscoveryService:(ContactDiscoveryService *)contactDiscoveryService
readReceiptManager:(OWSReadReceiptManager *)readReceiptManager readReceiptManager:(OWSReadReceiptManager *)readReceiptManager
outgoingReceiptManager:(OWSOutgoingReceiptManager *)outgoingReceiptManager outgoingReceiptManager:(OWSOutgoingReceiptManager *)outgoingReceiptManager
reachabilityManager:(id<SSKReachabilityManager>)reachabilityManager
syncManager:(id<OWSSyncManagerProtocol>)syncManager NS_DESIGNATED_INITIALIZER; syncManager:(id<OWSSyncManagerProtocol>)syncManager NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE;
@ -91,6 +93,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, readonly) OWSReadReceiptManager *readReceiptManager; @property (nonatomic, readonly) OWSReadReceiptManager *readReceiptManager;
@property (nonatomic, readonly) OWSOutgoingReceiptManager *outgoingReceiptManager; @property (nonatomic, readonly) OWSOutgoingReceiptManager *outgoingReceiptManager;
@property (nonatomic, readonly) id<OWSSyncManagerProtocol> syncManager; @property (nonatomic, readonly) id<OWSSyncManagerProtocol> syncManager;
@property (nonatomic, readonly) id<SSKReachabilityManager> reachabilityManager;
// This property is configured after Environment is created. // This property is configured after Environment is created.
@property (atomic, nullable) id<OWSCallMessageHandler> callMessageHandler; @property (atomic, nullable) id<OWSCallMessageHandler> callMessageHandler;

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

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

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

Loading…
Cancel
Save