xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/RxLibrary/GRXBufferedPipe.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker /*
2*cc02d7e2SAndroid Build Coastguard Worker  *
3*cc02d7e2SAndroid Build Coastguard Worker  * Copyright 2015 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker  *
5*cc02d7e2SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker  *
9*cc02d7e2SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker  *
11*cc02d7e2SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker  * limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker  *
17*cc02d7e2SAndroid Build Coastguard Worker  */
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker #import <Foundation/Foundation.h>
20*cc02d7e2SAndroid Build Coastguard Worker 
21*cc02d7e2SAndroid Build Coastguard Worker #import "GRXWriteable.h"
22*cc02d7e2SAndroid Build Coastguard Worker #import "GRXWriter.h"
23*cc02d7e2SAndroid Build Coastguard Worker 
24*cc02d7e2SAndroid Build Coastguard Worker /**
25*cc02d7e2SAndroid Build Coastguard Worker  * A buffered pipe is a Writer that also acts as a Writeable.
26*cc02d7e2SAndroid Build Coastguard Worker  * Once it is started, whatever values are written into it (via -writeValue:) will be propagated
27*cc02d7e2SAndroid Build Coastguard Worker  * immediately, unless flow control prevents it.
28*cc02d7e2SAndroid Build Coastguard Worker  * If it is throttled and keeps receiving values, as well as if it receives values before being
29*cc02d7e2SAndroid Build Coastguard Worker  * started, it will buffer them and propagate them in order as soon as its state becomes Started.
30*cc02d7e2SAndroid Build Coastguard Worker  * If it receives an end of stream (via -writesFinishedWithError:), it will buffer the EOS after the
31*cc02d7e2SAndroid Build Coastguard Worker  * last buffered value and issue it to the writeable after all buffered values are issued.
32*cc02d7e2SAndroid Build Coastguard Worker  *
33*cc02d7e2SAndroid Build Coastguard Worker  * Beware that a pipe of this type can't prevent receiving more values when it is paused (for
34*cc02d7e2SAndroid Build Coastguard Worker  * example if used to write data to a congested network connection). Because in such situations the
35*cc02d7e2SAndroid Build Coastguard Worker  * pipe will keep buffering all data written to it, your application could run out of memory and
36*cc02d7e2SAndroid Build Coastguard Worker  * crash. If you want to react to flow control signals to prevent that, instead of using this class
37*cc02d7e2SAndroid Build Coastguard Worker  * you can implement an object that conforms to GRXWriter.
38*cc02d7e2SAndroid Build Coastguard Worker  *
39*cc02d7e2SAndroid Build Coastguard Worker  * Thread-safety: the methods of this class are thread-safe.
40*cc02d7e2SAndroid Build Coastguard Worker  */
41*cc02d7e2SAndroid Build Coastguard Worker @interface GRXBufferedPipe : GRXWriter <GRXWriteable>
42*cc02d7e2SAndroid Build Coastguard Worker 
43*cc02d7e2SAndroid Build Coastguard Worker /** Convenience constructor. */
44*cc02d7e2SAndroid Build Coastguard Worker + (instancetype)pipe;
45*cc02d7e2SAndroid Build Coastguard Worker 
46*cc02d7e2SAndroid Build Coastguard Worker @end
47