diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index b6e3cec20..e6bd22595 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -1045,8 +1045,8 @@ static NSTimeInterval launchStartedAt; [Environment.shared.contactsManager startObserving]; // If there were any messages in our local queue which we hadn't yet processed. - [[OWSMessageReceiver sharedInstance] handleAnyUnprocessedEnvelopesAsync]; - [[OWSBatchMessageProcessor sharedInstance] handleAnyUnprocessedEnvelopesAsync]; + [SSKEnvironment.shared.messageReceiver handleAnyUnprocessedEnvelopesAsync]; + [SSKEnvironment.shared.batchMessageProcessor handleAnyUnprocessedEnvelopesAsync]; if (!Environment.shared.preferences.hasGeneratedThumbnails) { [OWSPrimaryStorage.sharedManager.newDatabaseConnection diff --git a/Signal/src/Jobs/MessageFetcherJob.swift b/Signal/src/Jobs/MessageFetcherJob.swift index bfc80def0..dd6215fd3 100644 --- a/Signal/src/Jobs/MessageFetcherJob.swift +++ b/Signal/src/Jobs/MessageFetcherJob.swift @@ -12,13 +12,9 @@ public class MessageFetcherJob: NSObject { private var timer: Timer? // MARK: injected dependencies - private let networkManager: TSNetworkManager - private let messageReceiver: OWSMessageReceiver private let signalService: OWSSignalService - @objc public init(messageReceiver: OWSMessageReceiver, networkManager: TSNetworkManager, signalService: OWSSignalService) { - self.messageReceiver = messageReceiver - self.networkManager = networkManager + @objc public init(signalService: OWSSignalService) { self.signalService = signalService super.init() @@ -26,6 +22,18 @@ public class MessageFetcherJob: NSObject { SwiftSingletons.register(self) } + // MARK: Singletons + + private var networkManager: TSNetworkManager { + return SSKEnvironment.shared.networkManager + } + + private var messageReceiver: OWSMessageReceiver { + return SSKEnvironment.shared.messageReceiver + } + + // MARK: + @discardableResult public func run() -> Promise { Logger.debug("") diff --git a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m index c9b514400..885c509d3 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m +++ b/Signal/src/ViewControllers/DebugUI/DebugUIMessages.m @@ -3912,9 +3912,9 @@ typedef OWSContact * (^OWSContactBlock)(YapDatabaseReadWriteTransaction *transac } [OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - [[OWSBatchMessageProcessor sharedInstance] enqueueEnvelopeData:envelopeData - plaintextData:plaintextData - transaction:transaction]; + [SSKEnvironment.shared.batchMessageProcessor enqueueEnvelopeData:envelopeData + plaintextData:plaintextData + transaction:transaction]; }]; } diff --git a/Signal/src/environment/SignalApp.m b/Signal/src/environment/SignalApp.m index 1d45aac59..7bea1e48d 100644 --- a/Signal/src/environment/SignalApp.m +++ b/Signal/src/environment/SignalApp.m @@ -87,9 +87,7 @@ NS_ASSUME_NONNULL_BEGIN [[OutboundCallInitiator alloc] initWithContactsManager:Environment.shared.contactsManager contactsUpdater:SSKEnvironment.shared.contactsUpdater]; - _messageFetcherJob = [[OWSMessageFetcherJob alloc] initWithMessageReceiver:[OWSMessageReceiver sharedInstance] - networkManager:SSKEnvironment.shared.networkManager - signalService:[OWSSignalService sharedInstance]]; + _messageFetcherJob = [[OWSMessageFetcherJob alloc] initWithSignalService:[OWSSignalService sharedInstance]]; } - (OWSWebRTCCallMessageHandler *)callMessageHandler diff --git a/SignalMessaging/environment/AppSetup.m b/SignalMessaging/environment/AppSetup.m index 1c4de01ea..9540f304e 100644 --- a/SignalMessaging/environment/AppSetup.m +++ b/SignalMessaging/environment/AppSetup.m @@ -10,9 +10,12 @@ #import #import #import +#import #import #import +#import #import +#import #import #import @@ -55,6 +58,10 @@ NS_ASSUME_NONNULL_BEGIN OWSBlockingManager *blockingManager = [[OWSBlockingManager alloc] initWithPrimaryStorage:primaryStorage]; OWSIdentityManager *identityManager = [[OWSIdentityManager alloc] initWithPrimaryStorage:primaryStorage]; id udManager = [[OWSUDManagerImpl alloc] initWithPrimaryStorage:primaryStorage]; + OWSMessageDecrypter *messageDecrypter = [[OWSMessageDecrypter alloc] initWithPrimaryStorage:primaryStorage]; + OWSBatchMessageProcessor *batchMessageProcessor = + [[OWSBatchMessageProcessor alloc] initWithPrimaryStorage:primaryStorage]; + OWSMessageReceiver *messageReceiver = [[OWSMessageReceiver alloc] initWithPrimaryStorage:primaryStorage]; [Environment setShared:[[Environment alloc] initWithPreferences:preferences]]; @@ -67,7 +74,10 @@ NS_ASSUME_NONNULL_BEGIN messageManager:messageManager blockingManager:blockingManager identityManager:identityManager - udManager:udManager]]; + udManager:udManager + messageDecrypter:messageDecrypter + batchMessageProcessor:batchMessageProcessor + messageReceiver:messageReceiver]]; appSpecificSingletonBlock(); diff --git a/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyReceivingErrorMessage.m b/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyReceivingErrorMessage.m index c8c55173d..fac35fbdd 100644 --- a/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyReceivingErrorMessage.m +++ b/SignalServiceKit/src/Messages/InvalidKeyMessages/TSInvalidIdentityKeyReceivingErrorMessage.m @@ -9,6 +9,7 @@ #import "OWSMessageReceiver.h" #import "OWSPrimaryStorage+SessionStore.h" #import "OWSPrimaryStorage.h" +#import "SSKEnvironment.h" #import "TSContactThread.h" #import "TSDatabaseView.h" #import "TSErrorMessage_privateConstructor.h" @@ -102,7 +103,7 @@ NS_ASSUME_NONNULL_BEGIN [self.thread receivedMessagesForInvalidKey:newKey]; for (TSInvalidIdentityKeyReceivingErrorMessage *errorMessage in messagesToDecrypt) { - [[OWSMessageReceiver sharedInstance] handleReceivedEnvelopeData:errorMessage.envelopeData]; + [SSKEnvironment.shared.messageReceiver handleReceivedEnvelopeData:errorMessage.envelopeData]; // Here we remove the existing error message because handleReceivedEnvelope will either // 1.) succeed and create a new successful message in the thread or... diff --git a/SignalServiceKit/src/Messages/OWSBatchMessageProcessor.h b/SignalServiceKit/src/Messages/OWSBatchMessageProcessor.h index 36a46e527..017dc21ab 100644 --- a/SignalServiceKit/src/Messages/OWSBatchMessageProcessor.h +++ b/SignalServiceKit/src/Messages/OWSBatchMessageProcessor.h @@ -4,6 +4,7 @@ NS_ASSUME_NONNULL_BEGIN +@class OWSPrimaryStorage; @class OWSStorage; @class SSKProtoEnvelope; @class YapDatabaseReadWriteTransaction; @@ -13,7 +14,8 @@ NS_ASSUME_NONNULL_BEGIN // in the order in which they were received. @interface OWSBatchMessageProcessor : NSObject -+ (instancetype)sharedInstance; +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage NS_DESIGNATED_INITIALIZER; + (NSString *)databaseExtensionName; + (void)asyncRegisterDatabaseExtension:(OWSStorage *)storage; diff --git a/SignalServiceKit/src/Messages/OWSBatchMessageProcessor.m b/SignalServiceKit/src/Messages/OWSBatchMessageProcessor.m index f0c65646b..df04ac7ff 100644 --- a/SignalServiceKit/src/Messages/OWSBatchMessageProcessor.m +++ b/SignalServiceKit/src/Messages/OWSBatchMessageProcessor.m @@ -231,15 +231,13 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo @interface OWSMessageContentQueue : NSObject -@property (nonatomic, readonly) OWSMessageManager *messagesManager; @property (nonatomic, readonly) YapDatabaseConnection *dbConnection; @property (nonatomic, readonly) OWSMessageContentJobFinder *finder; @property (nonatomic) BOOL isDrainingQueue; @property (atomic) BOOL isAppInBackground; -- (instancetype)initWithMessagesManager:(OWSMessageManager *)messagesManager - primaryStorage:(OWSPrimaryStorage *)primaryStorage - finder:(OWSMessageContentJobFinder *)finder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection + finder:(OWSMessageContentJobFinder *)finder NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; @end @@ -248,9 +246,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo @implementation OWSMessageContentQueue -- (instancetype)initWithMessagesManager:(OWSMessageManager *)messagesManager - primaryStorage:(OWSPrimaryStorage *)primaryStorage - finder:(OWSMessageContentJobFinder *)finder +- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection finder:(OWSMessageContentJobFinder *)finder { OWSSingletonAssert(); @@ -259,8 +255,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo return self; } - _messagesManager = messagesManager; - _dbConnection = [primaryStorage newDatabaseConnection]; + _dbConnection = dbConnection; _finder = finder; _isDrainingQueue = NO; @@ -286,6 +281,15 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo [[NSNotificationCenter defaultCenter] removeObserver:self]; } +#pragma mark - Singletons + +- (OWSMessageManager *)messageManager +{ + OWSAssertDebug(SSKEnvironment.shared.messageManager); + + return SSKEnvironment.shared.messageManager; +} + #pragma mark - Notifications - (void)applicationWillEnterForeground:(NSNotification *)notification @@ -399,9 +403,9 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo if (!envelope) { reportFailure(transaction); } else { - [self.messagesManager processEnvelope:envelope - plaintextData:job.plaintextData - transaction:transaction]; + [self.messageManager processEnvelope:envelope + plaintextData:job.plaintextData + transaction:transaction]; } } @catch (NSException *exception) { OWSFailDebug(@"Received an invalid envelope: %@", exception.debugDescription); @@ -437,9 +441,7 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo @implementation OWSBatchMessageProcessor -- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection - messagesManager:(OWSMessageManager *)messagesManager - primaryStorage:(OWSPrimaryStorage *)primaryStorage +- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage { OWSSingletonAssert(); @@ -448,38 +450,17 @@ NSString *const OWSMessageContentJobFinderExtensionGroup = @"OWSMessageContentJo return self; } + // For coherency we use the same dbConnection to persist and read the unprocessed envelopes + YapDatabaseConnection *dbConnection = [primaryStorage newDatabaseConnection]; OWSMessageContentJobFinder *finder = [[OWSMessageContentJobFinder alloc] initWithDBConnection:dbConnection]; - OWSMessageContentQueue *processingQueue = [[OWSMessageContentQueue alloc] initWithMessagesManager:messagesManager - primaryStorage:primaryStorage - finder:finder]; + OWSMessageContentQueue *processingQueue = + [[OWSMessageContentQueue alloc] initWithDBConnection:dbConnection finder:finder]; _processingQueue = processingQueue; return self; } -- (instancetype)initDefault -{ - // For concurrency coherency we use the same dbConnection to persist and read the unprocessed envelopes - YapDatabaseConnection *dbConnection = [[OWSPrimaryStorage sharedManager] newDatabaseConnection]; - OWSMessageManager *messagesManager = [OWSMessageManager sharedManager]; - OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager]; - - return [self initWithDBConnection:dbConnection messagesManager:messagesManager primaryStorage:primaryStorage]; -} - -+ (instancetype)sharedInstance -{ - static OWSBatchMessageProcessor *sharedInstance; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[self alloc] initDefault]; - }); - - return sharedInstance; -} - #pragma mark - class methods + (NSString *)databaseExtensionName diff --git a/SignalServiceKit/src/Messages/OWSMessageDecrypter.h b/SignalServiceKit/src/Messages/OWSMessageDecrypter.h index 086fdae3c..25da9f2c5 100644 --- a/SignalServiceKit/src/Messages/OWSMessageDecrypter.h +++ b/SignalServiceKit/src/Messages/OWSMessageDecrypter.h @@ -6,6 +6,7 @@ NS_ASSUME_NONNULL_BEGIN +@class OWSPrimaryStorage; @class SSKProtoEnvelope; @class YapDatabaseReadWriteTransaction; @@ -15,7 +16,7 @@ typedef void (^DecryptFailureBlock)(void); @interface OWSMessageDecrypter : OWSMessageHandler - (instancetype)init NS_UNAVAILABLE; -+ (instancetype)sharedManager; +- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage NS_DESIGNATED_INITIALIZER; // decryptEnvelope: can be called from any thread. // successBlock & failureBlock will be called an arbitrary thread. diff --git a/SignalServiceKit/src/Messages/OWSMessageDecrypter.m b/SignalServiceKit/src/Messages/OWSMessageDecrypter.m index e323e8240..926f1c80a 100644 --- a/SignalServiceKit/src/Messages/OWSMessageDecrypter.m +++ b/SignalServiceKit/src/Messages/OWSMessageDecrypter.m @@ -21,6 +21,7 @@ #import "TSPreKeyManager.h" #import #import +#import #import NS_ASSUME_NONNULL_BEGIN @@ -38,28 +39,7 @@ NS_ASSUME_NONNULL_BEGIN @implementation OWSMessageDecrypter -+ (instancetype)sharedManager -{ - static OWSMessageDecrypter *sharedMyManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedMyManager = [[self alloc] initDefault]; - }); - return sharedMyManager; -} - -- (instancetype)initDefault -{ - OWSPrimaryStorage *primaryStorage = [OWSPrimaryStorage sharedManager]; - OWSIdentityManager *identityManager = [OWSIdentityManager sharedManager]; - OWSBlockingManager *blockingManager = [OWSBlockingManager sharedManager]; - - return [self initWithPrimaryStorage:primaryStorage identityManager:identityManager blockingManager:blockingManager]; -} - - (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage - identityManager:(OWSIdentityManager *)identityManager - blockingManager:(OWSBlockingManager *)blockingManager { self = [super init]; @@ -68,8 +48,6 @@ NS_ASSUME_NONNULL_BEGIN } _primaryStorage = primaryStorage; - _identityManager = identityManager; - _blockingManager = blockingManager; _dbConnection = primaryStorage.newDatabaseConnection; @@ -78,13 +56,29 @@ NS_ASSUME_NONNULL_BEGIN return self; } +#pragma mark - Singletons + +- (OWSBlockingManager *)blockingManager +{ + OWSAssertDebug(SSKEnvironment.shared.blockingManager); + + return SSKEnvironment.shared.blockingManager; +} + +- (OWSIdentityManager *)identityManager +{ + OWSAssertDebug(SSKEnvironment.shared.identityManager); + + return SSKEnvironment.shared.identityManager; +} + #pragma mark - Blocking - (BOOL)isEnvelopeSenderBlocked:(SSKProtoEnvelope *)envelope { OWSAssertDebug(envelope); - return [_blockingManager.blockedPhoneNumbers containsObject:envelope.source]; + return [self.blockingManager.blockedPhoneNumbers containsObject:envelope.source]; } #pragma mark - Decryption diff --git a/SignalServiceKit/src/Messages/OWSMessageReceiver.h b/SignalServiceKit/src/Messages/OWSMessageReceiver.h index a68f55bfe..bff0571ba 100644 --- a/SignalServiceKit/src/Messages/OWSMessageReceiver.h +++ b/SignalServiceKit/src/Messages/OWSMessageReceiver.h @@ -4,6 +4,7 @@ NS_ASSUME_NONNULL_BEGIN +@class OWSPrimaryStorage; @class OWSStorage; // This class is used to write incoming (encrypted, unprocessed) @@ -12,7 +13,8 @@ NS_ASSUME_NONNULL_BEGIN // are forwarded to OWSBatchMessageProcessor. @interface OWSMessageReceiver : NSObject -+ (instancetype)sharedInstance; +- (instancetype)init NS_UNAVAILABLE; +- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage NS_DESIGNATED_INITIALIZER; + (NSString *)databaseExtensionName; + (void)asyncRegisterDatabaseExtension:(OWSStorage *)storage; diff --git a/SignalServiceKit/src/Messages/OWSMessageReceiver.m b/SignalServiceKit/src/Messages/OWSMessageReceiver.m index 80cebbb37..5f8a2a093 100644 --- a/SignalServiceKit/src/Messages/OWSMessageReceiver.m +++ b/SignalServiceKit/src/Messages/OWSMessageReceiver.m @@ -221,14 +221,12 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin @interface OWSMessageDecryptQueue : NSObject -@property (nonatomic, readonly) OWSMessageDecrypter *messageDecrypter; -@property (nonatomic, readonly) OWSBatchMessageProcessor *batchMessageProcessor; +@property (nonatomic, readonly) YapDatabaseConnection *dbConnection; @property (nonatomic, readonly) OWSMessageDecryptJobFinder *finder; @property (nonatomic) BOOL isDrainingQueue; -- (instancetype)initWithMessageDecrypter:(OWSMessageDecrypter *)messageDecrypter - batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor - finder:(OWSMessageDecryptJobFinder *)finder NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection + finder:(OWSMessageDecryptJobFinder *)finder NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; @end @@ -237,9 +235,7 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin @implementation OWSMessageDecryptQueue -- (instancetype)initWithMessageDecrypter:(OWSMessageDecrypter *)messageDecrypter - batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor - finder:(OWSMessageDecryptJobFinder *)finder +- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection finder:(OWSMessageDecryptJobFinder *)finder { OWSSingletonAssert(); @@ -248,8 +244,7 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin return self; } - _messageDecrypter = messageDecrypter; - _batchMessageProcessor = batchMessageProcessor; + _dbConnection = dbConnection; _finder = finder; _isDrainingQueue = NO; @@ -260,7 +255,23 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin return self; } -#pragma mark - instance methods +#pragma mark - Singletons + +- (OWSMessageDecrypter *)messageDecrypter +{ + OWSAssertDebug(SSKEnvironment.shared.messageDecrypter); + + return SSKEnvironment.shared.messageDecrypter; +} + +- (OWSBatchMessageProcessor *)batchMessageProcessor +{ + OWSAssertDebug(SSKEnvironment.shared.batchMessageProcessor); + + return SSKEnvironment.shared.batchMessageProcessor; +} + +#pragma mark - Instance methods - (dispatch_queue_t)serialQueue { @@ -382,9 +393,7 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin @implementation OWSMessageReceiver -- (instancetype)initWithDBConnection:(YapDatabaseConnection *)dbConnection - messageDecrypter:(OWSMessageDecrypter *)messageDecrypter - batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor +- (instancetype)initWithPrimaryStorage:(OWSPrimaryStorage *)primaryStorage { OWSSingletonAssert(); @@ -393,41 +402,17 @@ NSString *const OWSMessageDecryptJobFinderExtensionGroup = @"OWSMessageProcessin return self; } + // For coherency we use the same dbConnection to persist and read the unprocessed envelopes + YapDatabaseConnection *dbConnection = [primaryStorage newDatabaseConnection]; OWSMessageDecryptJobFinder *finder = [[OWSMessageDecryptJobFinder alloc] initWithDBConnection:dbConnection]; OWSMessageDecryptQueue *processingQueue = - [[OWSMessageDecryptQueue alloc] initWithMessageDecrypter:messageDecrypter - batchMessageProcessor:batchMessageProcessor - finder:finder]; + [[OWSMessageDecryptQueue alloc] initWithDBConnection:dbConnection finder:finder]; _processingQueue = processingQueue; return self; } -- (instancetype)initDefault -{ - // For concurrency coherency we use the same dbConnection to persist and read the unprocessed envelopes - YapDatabaseConnection *dbConnection = [[OWSPrimaryStorage sharedManager] newDatabaseConnection]; - OWSMessageDecrypter *messageDecrypter = [OWSMessageDecrypter sharedManager]; - OWSBatchMessageProcessor *batchMessageProcessor = [OWSBatchMessageProcessor sharedInstance]; - - return [self initWithDBConnection:dbConnection - messageDecrypter:messageDecrypter - batchMessageProcessor:batchMessageProcessor]; -} - -+ (instancetype)sharedInstance -{ - static OWSMessageReceiver *sharedInstance; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[self alloc] initDefault]; - }); - - return sharedInstance; -} - #pragma mark - class methods + (NSString *)databaseExtensionName diff --git a/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m b/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m index dc4245710..179c6a90c 100644 --- a/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m +++ b/SignalServiceKit/src/Network/WebSockets/TSSocketManager.m @@ -147,7 +147,6 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_ @interface TSSocketManager () @property (nonatomic, readonly) OWSSignalService *signalService; -@property (nonatomic, readonly) OWSMessageReceiver *messageReceiver; // This class has a few "tiers" of state. // @@ -218,7 +217,6 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_ OWSAssertIsOnMainThread(); _signalService = [OWSSignalService sharedInstance]; - _messageReceiver = [OWSMessageReceiver sharedInstance]; _state = SocketManagerStateClosed; _socketMessageMap = [NSMutableDictionary new]; @@ -270,6 +268,13 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_ return sharedMyManager; } +#pragma mark - Dependencies + +- (OWSMessageReceiver *)messageReceiver +{ + return SSKEnvironment.shared.messageReceiver; +} + #pragma mark - Manage Socket - (void)ensureWebsocketIsOpen diff --git a/SignalServiceKit/src/SSKEnvironment.h b/SignalServiceKit/src/SSKEnvironment.h index 3425ba2fb..d6a4195d9 100644 --- a/SignalServiceKit/src/SSKEnvironment.h +++ b/SignalServiceKit/src/SSKEnvironment.h @@ -5,9 +5,12 @@ NS_ASSUME_NONNULL_BEGIN @class ContactsUpdater; +@class OWSBatchMessageProcessor; @class OWSBlockingManager; @class OWSIdentityManager; +@class OWSMessageDecrypter; @class OWSMessageManager; +@class OWSMessageReceiver; @class OWSMessageSender; @class OWSPrimaryStorage; @class TSNetworkManager; @@ -30,7 +33,10 @@ NS_ASSUME_NONNULL_BEGIN messageManager:(OWSMessageManager *)messageManager blockingManager:(OWSBlockingManager *)blockingManager identityManager:(OWSIdentityManager *)identityManager - udManager:(id)udManager NS_DESIGNATED_INITIALIZER; + udManager:(id)udManager + messageDecrypter:(OWSMessageDecrypter *)messageDecrypter + batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor + messageReceiver:(OWSMessageReceiver *)messageReceiver NS_DESIGNATED_INITIALIZER; - (instancetype)init NS_UNAVAILABLE; @@ -53,6 +59,9 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) OWSBlockingManager *blockingManager; @property (nonatomic, readonly) OWSIdentityManager *identityManager; @property (nonatomic, readonly) id udManager; +@property (nonatomic, readonly) OWSMessageDecrypter *messageDecrypter; +@property (nonatomic, readonly) OWSBatchMessageProcessor *batchMessageProcessor; +@property (nonatomic, readonly) OWSMessageReceiver *messageReceiver; // This property is configured after Environment is created. @property (atomic, nullable) id callMessageHandler; diff --git a/SignalServiceKit/src/SSKEnvironment.m b/SignalServiceKit/src/SSKEnvironment.m index 516565492..5e00d307b 100644 --- a/SignalServiceKit/src/SSKEnvironment.m +++ b/SignalServiceKit/src/SSKEnvironment.m @@ -22,6 +22,9 @@ static SSKEnvironment *sharedSSKEnvironment; @property (nonatomic) OWSBlockingManager *blockingManager; @property (nonatomic) OWSIdentityManager *identityManager; @property (nonatomic) id udManager; +@property (nonatomic) OWSMessageDecrypter *messageDecrypter; +@property (nonatomic) OWSBatchMessageProcessor *batchMessageProcessor; +@property (nonatomic) OWSMessageReceiver *messageReceiver; @end @@ -43,6 +46,9 @@ static SSKEnvironment *sharedSSKEnvironment; blockingManager:(OWSBlockingManager *)blockingManager identityManager:(OWSIdentityManager *)identityManager udManager:(id)udManager + messageDecrypter:(OWSMessageDecrypter *)messageDecrypter + batchMessageProcessor:(OWSBatchMessageProcessor *)batchMessageProcessor + messageReceiver:(OWSMessageReceiver *)messageReceiver { self = [super init]; if (!self) { @@ -59,6 +65,9 @@ static SSKEnvironment *sharedSSKEnvironment; OWSAssertDebug(blockingManager); OWSAssertDebug(identityManager); OWSAssertDebug(udManager); + OWSAssertDebug(messageDecrypter); + OWSAssertDebug(batchMessageProcessor); + OWSAssertDebug(messageReceiver); _contactsManager = contactsManager; _messageSender = messageSender; @@ -70,6 +79,9 @@ static SSKEnvironment *sharedSSKEnvironment; _blockingManager = blockingManager; _identityManager = identityManager; _udManager = udManager; + _messageDecrypter = messageDecrypter; + _batchMessageProcessor = batchMessageProcessor; + _messageReceiver = messageReceiver; return self; } diff --git a/SignalServiceKit/src/Tests/MockSSKEnvironment.m b/SignalServiceKit/src/Tests/MockSSKEnvironment.m index b163c0b70..f913665c2 100644 --- a/SignalServiceKit/src/Tests/MockSSKEnvironment.m +++ b/SignalServiceKit/src/Tests/MockSSKEnvironment.m @@ -3,6 +3,7 @@ // #import "MockSSKEnvironment.h" +#import "OWSBatchMessageProcessor.h" #import "OWSBlockingManager.h" #import "OWSFakeCallMessageHandler.h" #import "OWSFakeContactsManager.h" @@ -12,7 +13,9 @@ #import "OWSFakeNotificationsManager.h" #import "OWSFakeProfileManager.h" #import "OWSIdentityManager.h" +#import "OWSMessageDecrypter.h" #import "OWSMessageManager.h" +#import "OWSMessageReceiver.h" #import "OWSPrimaryStorage.h" #import @@ -49,6 +52,10 @@ NS_ASSUME_NONNULL_BEGIN OWSBlockingManager *blockingManager = [[OWSBlockingManager alloc] initWithPrimaryStorage:primaryStorage]; OWSIdentityManager *identityManager = [[OWSIdentityManager alloc] initWithPrimaryStorage:primaryStorage]; id udManager = [[OWSUDManagerImpl alloc] initWithPrimaryStorage:primaryStorage]; + OWSMessageDecrypter *messageDecrypter = [[OWSMessageDecrypter alloc] initWithPrimaryStorage:primaryStorage]; + OWSBatchMessageProcessor *batchMessageProcessor = + [[OWSBatchMessageProcessor alloc] initWithPrimaryStorage:primaryStorage]; + OWSMessageReceiver *messageReceiver = [[OWSMessageReceiver alloc] initWithPrimaryStorage:primaryStorage]; self = [super initWithContactsManager:contactsManager messageSender:messageSender @@ -59,7 +66,10 @@ NS_ASSUME_NONNULL_BEGIN messageManager:messageManager blockingManager:blockingManager identityManager:identityManager - udManager:udManager]; + udManager:udManager + messageDecrypter:messageDecrypter + batchMessageProcessor:batchMessageProcessor + messageReceiver:messageReceiver]; if (!self) { return nil; }