Skip to content
This repository was archived by the owner on May 20, 2021. It is now read-only.

Commit a7b95aa

Browse files
committed
Added overload to unsubscribe from a collection immediately
1 parent fc20898 commit a7b95aa

4 files changed

+39
-17
lines changed

Meteor/METDDPClient.h

100644100755
+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ typedef void (^METLogOutCompletionHandler)(NSError * __nullable error);
9595
- (METSubscription *)addSubscriptionWithName:(NSString *)name parameters:(nullable NSArray *)parameters;
9696
- (METSubscription *)addSubscriptionWithName:(NSString *)name parameters:(nullable NSArray *)parameters completionHandler:(nullable METSubscriptionCompletionHandler)completionHandler;
9797
- (void)removeSubscription:(METSubscription *)subscription;
98+
- (void)removeSubscription:(METSubscription *)subscription immediately:(BOOL)immediately completionHandler:(nullable METSubscriptionCompletionHandler)completionHandler;
9899

99100
#pragma mark - Method Invocations
100101
/// @name Defining Method Stubs

Meteor/METDDPClient.m

100644100755
+5-1
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,11 @@ - (void)sendSubMessageForSubscription:(METSubscription *)subscription {
520520
}
521521

522522
- (void)removeSubscription:(METSubscription *)subscription {
523-
[_subscriptionManager removeSubscription:subscription];
523+
[self removeSubscription:subscription immediately:NO completionHandler:nil];
524+
}
525+
526+
- (void)removeSubscription:(METSubscription *)subscription immediately:(BOOL)immediately completionHandler:(nullable METSubscriptionCompletionHandler)completionHandler {
527+
[_subscriptionManager removeSubscription:subscription immediately:immediately completionHandler:completionHandler];
524528
}
525529

526530
- (void)sendUnsubMessageForSubscription:(METSubscription *)subscription {

Meteor/METSubscriptionManager.h

100644100755
+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
3535
@property (assign, nonatomic) NSTimeInterval defaultNotInUseTimeout;
3636

3737
- (METSubscription *)addSubscriptionWithName:(NSString *)name parameters:(nullable NSArray *)parameters completionHandler:(nullable METSubscriptionCompletionHandler)completionHandler;
38-
- (void)removeSubscription:(METSubscription *)subscription;
38+
- (void)removeSubscription:(METSubscription *)subscription immediately:(BOOL)immediately completionHandler:(nullable METSubscriptionCompletionHandler)completionHandler;
3939

4040
- (void)didReceiveReadyForSubscriptionWithID:(NSString *)subscriptionID;
4141
- (void)didReceiveNosubForSubscriptionWithID:(NSString *)subscriptionID error:(NSError *)error;

Meteor/METSubscriptionManager.m

100644100755
+32-15
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ @interface METSubscriptionManager ()
3535

3636
@end
3737

38+
NSString * const METSubscriptionManagerErrorDomain = @"com.meteor.SubscriptionManager.ErrorDomain";
39+
3840
@implementation METSubscriptionManager {
3941
dispatch_queue_t _queue;
4042
NSMutableDictionary *_subscriptionsByID;
@@ -97,7 +99,7 @@ - (METSubscription *)existingSubscriptionWithName:(NSString *)name parameters:(N
9799
return existingSubscription;
98100
}
99101

100-
- (void)removeSubscription:(METSubscription *)subscription {
102+
- (void)removeSubscription:(METSubscription *)subscription immediately:(BOOL)immediately completionHandler:(nullable METSubscriptionCompletionHandler)completionHandler {
101103
NSParameterAssert(subscription);
102104

103105
dispatch_async(_queue, ^{
@@ -106,25 +108,40 @@ - (void)removeSubscription:(METSubscription *)subscription {
106108
if (!subscription.inUse) {
107109
[self removeSubscriptionToBeRevivedAfterConnect:subscription];
108110

109-
if (subscription.reuseTimer == nil) {
110-
subscription.reuseTimer = [[METTimer alloc] initWithQueue:_queue block:^{
111-
// Subscription was reused before timeout
112-
if (subscription.inUse) {
113-
return;
114-
}
115-
116-
[_subscriptionsByID removeObjectForKey:subscription.identifier];
117-
118-
if (_client.connected) {
119-
[_client sendUnsubMessageForSubscription:subscription];
120-
}
121-
}];
111+
if (immediately) {
112+
[self removeSubscription:subscription completionHandler:completionHandler];
113+
} else {
114+
if (subscription.reuseTimer == nil) {
115+
subscription.reuseTimer = [[METTimer alloc] initWithQueue:_queue block:^{
116+
// Subscription was reused before timeout
117+
if (subscription.inUse) {
118+
return;
119+
}
120+
[self removeSubscription:subscription completionHandler:completionHandler];
121+
}];
122+
}
123+
[subscription.reuseTimer startWithTimeInterval:subscription.notInUseTimeout];
122124
}
123-
[subscription.reuseTimer startWithTimeInterval:subscription.notInUseTimeout];
124125
}
125126
});
126127
}
127128

129+
- (void)removeSubscription:(METSubscription *)subscription completionHandler:(METSubscriptionCompletionHandler)completionHandler {
130+
[_subscriptionsByID removeObjectForKey:subscription.identifier];
131+
132+
NSError *error = nil;
133+
134+
if (_client.connected) {
135+
[_client sendUnsubMessageForSubscription:subscription];
136+
} else {
137+
error = [NSError errorWithDomain:METSubscriptionManagerErrorDomain code:0 userInfo:@{NSLocalizedDescriptionKey: @"Client is not connected"}];
138+
}
139+
140+
if (completionHandler) {
141+
completionHandler(error);
142+
}
143+
}
144+
128145
- (void)didReceiveReadyForSubscriptionWithID:(NSString *)subscriptionID {
129146
NSParameterAssert(subscriptionID);
130147

0 commit comments

Comments
 (0)