diff options
author | 2018-02-15 16:17:44 -0800 | |
---|---|---|
committer | 2018-02-15 16:17:44 -0800 | |
commit | 81ee594e325a922a91557d82563132f22977c947 (patch) | |
tree | 89ea78b6ccc77fa2f11e1c6b1fa40f3c8d54a3b2 /Firestore/Source/Remote/FSTStream.h | |
parent | fd9fd271d0dba3935a6f5611a1554f2c59b696af (diff) |
DispatchQueue delayed callback improvements + testing (#784)
Basically a port of https://github.com/firebase/firebase-js-sdk/commit/a1e346ff93c6cbcc0a1b3b33f0fbc3a7b66e7e12 and https://github.com/firebase/firebase-js-sdk/commit/fce4168309f42aa038125f39818fbf654b65b05f
* Introduces a DelayedCallback helper class in FSTDispatchQueue to encapsulate delayed callback logic.
* Adds cancellation support.
* Updates the idle timer in FSTStream to use new cancellation support.
* Adds a FSTTimerId enum for identifying delayed operations on the queue and uses it to identify our existing backoff and idle timers.
* Added containsDelayedCallback: and runDelayedCallbacksUntil: methods to FSTDispatchQueue which can be used from tests to check for the presence of a callback or to schedule them to run early.
* Removes FSTTestDispatchQueue and changes idle tests to use new test methods.
Diffstat (limited to 'Firestore/Source/Remote/FSTStream.h')
-rw-r--r-- | Firestore/Source/Remote/FSTStream.h | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/Firestore/Source/Remote/FSTStream.h b/Firestore/Source/Remote/FSTStream.h index c390dbb..6630083 100644 --- a/Firestore/Source/Remote/FSTStream.h +++ b/Firestore/Source/Remote/FSTStream.h @@ -17,6 +17,7 @@ #import <Foundation/Foundation.h> #import "Firestore/Source/Core/FSTTypes.h" +#import "Firestore/Source/Util/FSTDispatchQueue.h" #include "Firestore/core/src/firebase/firestore/core/database_info.h" @@ -91,6 +92,8 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithDatabase:(const firebase::firestore::core::DatabaseInfo *)database workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue + connectionTimerID:(FSTTimerID)connectionTimerID + idleTimerID:(FSTTimerID)idleTimerID credentials:(id<FSTCredentialsProvider>)credentials responseMessageClass:(Class)responseMessageClass NS_DESIGNATED_INITIALIZER; @@ -142,8 +145,13 @@ NS_ASSUME_NONNULL_BEGIN - (void)stop; /** - * Initializes the idle timer. If no write takes place within one minute, the GRPC stream will be - * closed. + * Marks this stream as idle. If no further actions are performed on the stream for one minute, the + * stream will automatically close itself and notify the stream's close handler. The stream will + * then be in a non-started state, requiring the caller to start the stream again before further + * use. + * + * Only streams that are in state 'Open' can be marked idle, as all other states imply pending + * network operations. */ - (void)markIdle; |