diff options
Diffstat (limited to 'Firestore/Source/Remote/FSTOnlineStateTracker.h')
-rw-r--r-- | Firestore/Source/Remote/FSTOnlineStateTracker.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/Firestore/Source/Remote/FSTOnlineStateTracker.h b/Firestore/Source/Remote/FSTOnlineStateTracker.h new file mode 100644 index 0000000..a414a18 --- /dev/null +++ b/Firestore/Source/Remote/FSTOnlineStateTracker.h @@ -0,0 +1,71 @@ +/* + * Copyright 2018 Google + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import <Foundation/Foundation.h> + +#import "Firestore/Source/Core/FSTTypes.h" + +@class FSTDispatchQueue; +@protocol FSTOnlineStateDelegate; + +NS_ASSUME_NONNULL_BEGIN + +/** + * A component used by the FSTRemoteStore to track the FSTOnlineState (that is, whether or not the + * client as a whole should be considered to be online or offline), implementing the appropriate + * heuristics. + * + * In particular, when the client is trying to connect to the backend, we allow up to + * kMaxWatchStreamFailures within kOnlineStateTimeout for a connection to succeed. If we have too + * many failures or the timeout elapses, then we set the FSTOnlineState to Offline, and + * the client will behave as if it is offline (getDocument() calls will return cached data, etc.). + */ +@interface FSTOnlineStateTracker : NSObject + +- (instancetype)initWithWorkerDispatchQueue:(FSTDispatchQueue *)queue; + +- (instancetype)init NS_UNAVAILABLE; + +/** A delegate to be notified on FSTOnlineState changes. */ +@property(nonatomic, weak) id<FSTOnlineStateDelegate> onlineStateDelegate; + +/** + * Called by FSTRemoteStore when a watch stream is started. + * + * It sets the FSTOnlineState to Unknown and starts the onlineStateTimer if necessary. + */ +- (void)handleWatchStreamStart; + +/** + * Called by FSTRemoteStore when a watch stream fails. + * + * Updates our FSTOnlineState as appropriate. The first failure moves us to FSTOnlineStateUnknown. + * We then may allow multiple failures (based on kMaxWatchStreamFailures) before we actually + * transition to FSTOnlineStateOffline. + */ +- (void)handleWatchStreamFailure; + +/** + * Explicitly sets the FSTOnlineState to the specified state. + * + * Note that this resets the timers / failure counters, etc. used by our Offline heuristics, so + * it must not be used in place of handleWatchStreamStart and handleWatchStreamFailure. + */ +- (void)updateState:(FSTOnlineState)newState; + +@end + +NS_ASSUME_NONNULL_END |