xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/GRPCClient/GRPCCall.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 /**
20*cc02d7e2SAndroid Build Coastguard Worker  * \mainpage notitle
21*cc02d7e2SAndroid Build Coastguard Worker  *
22*cc02d7e2SAndroid Build Coastguard Worker  * The gRPC protocol is an RPC protocol on top of HTTP2.
23*cc02d7e2SAndroid Build Coastguard Worker  *
24*cc02d7e2SAndroid Build Coastguard Worker  * While the most common type of RPC receives only one request message and returns only one response
25*cc02d7e2SAndroid Build Coastguard Worker  * message, the protocol also supports RPCs that return multiple individual messages in a streaming
26*cc02d7e2SAndroid Build Coastguard Worker  * fashion, RPCs that accept a stream of request messages, or RPCs with both streaming requests and
27*cc02d7e2SAndroid Build Coastguard Worker  * responses.
28*cc02d7e2SAndroid Build Coastguard Worker  *
29*cc02d7e2SAndroid Build Coastguard Worker  * Conceptually, each gRPC call consists of a bidirectional stream of binary messages, with RPCs of
30*cc02d7e2SAndroid Build Coastguard Worker  * the "non-streaming type" sending only one message in the corresponding direction (the protocol
31*cc02d7e2SAndroid Build Coastguard Worker  * doesn't make any distinction).
32*cc02d7e2SAndroid Build Coastguard Worker  *
33*cc02d7e2SAndroid Build Coastguard Worker  * Each RPC uses a different HTTP2 stream, and thus multiple simultaneous RPCs can be multiplexed
34*cc02d7e2SAndroid Build Coastguard Worker  * transparently on the same TCP connection.
35*cc02d7e2SAndroid Build Coastguard Worker  */
36*cc02d7e2SAndroid Build Coastguard Worker 
37*cc02d7e2SAndroid Build Coastguard Worker #import <Foundation/Foundation.h>
38*cc02d7e2SAndroid Build Coastguard Worker 
39*cc02d7e2SAndroid Build Coastguard Worker #import "GRPCCallOptions.h"
40*cc02d7e2SAndroid Build Coastguard Worker #import "GRPCDispatchable.h"
41*cc02d7e2SAndroid Build Coastguard Worker #import "GRPCTypes.h"
42*cc02d7e2SAndroid Build Coastguard Worker 
43*cc02d7e2SAndroid Build Coastguard Worker // The legacy header is included for backwards compatibility. Some V1 API users are still using
44*cc02d7e2SAndroid Build Coastguard Worker // GRPCCall by importing GRPCCall.h header so we need this import.
45*cc02d7e2SAndroid Build Coastguard Worker #import "GRPCCallLegacy.h"
46*cc02d7e2SAndroid Build Coastguard Worker 
47*cc02d7e2SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_BEGIN
48*cc02d7e2SAndroid Build Coastguard Worker 
49*cc02d7e2SAndroid Build Coastguard Worker /** An object can implement this protocol to receive responses from server from a call. */
50*cc02d7e2SAndroid Build Coastguard Worker @protocol GRPCResponseHandler <NSObject, GRPCDispatchable>
51*cc02d7e2SAndroid Build Coastguard Worker 
52*cc02d7e2SAndroid Build Coastguard Worker @optional
53*cc02d7e2SAndroid Build Coastguard Worker 
54*cc02d7e2SAndroid Build Coastguard Worker /**
55*cc02d7e2SAndroid Build Coastguard Worker  * Issued when initial metadata is received from the server.
56*cc02d7e2SAndroid Build Coastguard Worker  */
57*cc02d7e2SAndroid Build Coastguard Worker - (void)didReceiveInitialMetadata:(nullable NSDictionary *)initialMetadata;
58*cc02d7e2SAndroid Build Coastguard Worker 
59*cc02d7e2SAndroid Build Coastguard Worker /**
60*cc02d7e2SAndroid Build Coastguard Worker  * Issued when a message is received from the server. The message is the raw data received from the
61*cc02d7e2SAndroid Build Coastguard Worker  * server, with decompression and without proto deserialization.
62*cc02d7e2SAndroid Build Coastguard Worker  *
63*cc02d7e2SAndroid Build Coastguard Worker  * <b> This method is deprecated and does not work with interceptors.</b> To use GRPCCall2 interface
64*cc02d7e2SAndroid Build Coastguard Worker  * with interceptor, please implement GRPCResponseHandler::didReceiveData method and leave this
65*cc02d7e2SAndroid Build Coastguard Worker  * method unimplemented. If this method and didReceiveRawMessage are implemented at the same time,
66*cc02d7e2SAndroid Build Coastguard Worker  * implementation of this method will be ignored.
67*cc02d7e2SAndroid Build Coastguard Worker  */
68*cc02d7e2SAndroid Build Coastguard Worker - (void)didReceiveRawMessage:(nullable NSData *)message;
69*cc02d7e2SAndroid Build Coastguard Worker 
70*cc02d7e2SAndroid Build Coastguard Worker /**
71*cc02d7e2SAndroid Build Coastguard Worker  * Issued when gRPC message is received from the server. The data is always decompressed with gRPC
72*cc02d7e2SAndroid Build Coastguard Worker  * or HTTP compression algorithm specified in the response header. \p data could be any type as
73*cc02d7e2SAndroid Build Coastguard Worker  * transport layer and interceptors may modify the type of the data (e.g. a Protobuf interceptor may
74*cc02d7e2SAndroid Build Coastguard Worker  * consume NSData typed data and issue GPBMessage typed data to user). Users should interpret \p
75*cc02d7e2SAndroid Build Coastguard Worker  * data according to the configuration of their calls. Interceptor authors should not assume the
76*cc02d7e2SAndroid Build Coastguard Worker  * type of \p data unless an agreement is made on how it should be used in a particular call
77*cc02d7e2SAndroid Build Coastguard Worker  * setting.
78*cc02d7e2SAndroid Build Coastguard Worker  */
79*cc02d7e2SAndroid Build Coastguard Worker - (void)didReceiveData:(id)data;
80*cc02d7e2SAndroid Build Coastguard Worker 
81*cc02d7e2SAndroid Build Coastguard Worker /**
82*cc02d7e2SAndroid Build Coastguard Worker  * Issued when a call finished. If the call finished successfully, \p error is nil and \p
83*cc02d7e2SAndroid Build Coastguard Worker  * trailingMetadata consists any trailing metadata received from the server. Otherwise, \p error
84*cc02d7e2SAndroid Build Coastguard Worker  * is non-nil and contains the corresponding error information, including gRPC error codes and
85*cc02d7e2SAndroid Build Coastguard Worker  * error descriptions.
86*cc02d7e2SAndroid Build Coastguard Worker  */
87*cc02d7e2SAndroid Build Coastguard Worker - (void)didCloseWithTrailingMetadata:(nullable NSDictionary *)trailingMetadata
88*cc02d7e2SAndroid Build Coastguard Worker                                error:(nullable NSError *)error;
89*cc02d7e2SAndroid Build Coastguard Worker 
90*cc02d7e2SAndroid Build Coastguard Worker /**
91*cc02d7e2SAndroid Build Coastguard Worker  * Issued when flow control is enabled for the call and a message written with GRPCCall2::writeData
92*cc02d7e2SAndroid Build Coastguard Worker  * is passed to gRPC core with SEND_MESSAGE operation.
93*cc02d7e2SAndroid Build Coastguard Worker  */
94*cc02d7e2SAndroid Build Coastguard Worker - (void)didWriteData;
95*cc02d7e2SAndroid Build Coastguard Worker 
96*cc02d7e2SAndroid Build Coastguard Worker @end
97*cc02d7e2SAndroid Build Coastguard Worker 
98*cc02d7e2SAndroid Build Coastguard Worker /**
99*cc02d7e2SAndroid Build Coastguard Worker  * HTTP request parameters. If Protobuf is used, these parameters are automatically generated by
100*cc02d7e2SAndroid Build Coastguard Worker  * Protobuf. If directly using the GRPCCall2 class, users should specify these parameters manually.
101*cc02d7e2SAndroid Build Coastguard Worker  */
102*cc02d7e2SAndroid Build Coastguard Worker @interface GRPCRequestOptions : NSObject <NSCopying>
103*cc02d7e2SAndroid Build Coastguard Worker 
104*cc02d7e2SAndroid Build Coastguard Worker - (instancetype)init NS_UNAVAILABLE;
105*cc02d7e2SAndroid Build Coastguard Worker 
106*cc02d7e2SAndroid Build Coastguard Worker + (instancetype)new NS_UNAVAILABLE;
107*cc02d7e2SAndroid Build Coastguard Worker 
108*cc02d7e2SAndroid Build Coastguard Worker /** Initialize with all properties. */
109*cc02d7e2SAndroid Build Coastguard Worker - (instancetype)initWithHost:(NSString *)host
110*cc02d7e2SAndroid Build Coastguard Worker                         path:(NSString *)path
111*cc02d7e2SAndroid Build Coastguard Worker                       safety:(GRPCCallSafety)safety NS_DESIGNATED_INITIALIZER;
112*cc02d7e2SAndroid Build Coastguard Worker 
113*cc02d7e2SAndroid Build Coastguard Worker /** The host serving the RPC service. */
114*cc02d7e2SAndroid Build Coastguard Worker @property(copy, readonly) NSString *host;
115*cc02d7e2SAndroid Build Coastguard Worker /** The path to the RPC call. */
116*cc02d7e2SAndroid Build Coastguard Worker @property(copy, readonly) NSString *path;
117*cc02d7e2SAndroid Build Coastguard Worker /**
118*cc02d7e2SAndroid Build Coastguard Worker  * Specify whether the call is idempotent or cachable. gRPC may select different HTTP verbs for the
119*cc02d7e2SAndroid Build Coastguard Worker  * call based on this information. The default verb used by gRPC is POST.
120*cc02d7e2SAndroid Build Coastguard Worker  */
121*cc02d7e2SAndroid Build Coastguard Worker @property(readonly) GRPCCallSafety safety;
122*cc02d7e2SAndroid Build Coastguard Worker 
123*cc02d7e2SAndroid Build Coastguard Worker @end
124*cc02d7e2SAndroid Build Coastguard Worker 
125*cc02d7e2SAndroid Build Coastguard Worker #pragma mark GRPCCall
126*cc02d7e2SAndroid Build Coastguard Worker 
127*cc02d7e2SAndroid Build Coastguard Worker /**
128*cc02d7e2SAndroid Build Coastguard Worker  * A GRPCCall2 object represents an RPC call.
129*cc02d7e2SAndroid Build Coastguard Worker  */
130*cc02d7e2SAndroid Build Coastguard Worker @interface GRPCCall2 : NSObject
131*cc02d7e2SAndroid Build Coastguard Worker 
132*cc02d7e2SAndroid Build Coastguard Worker - (instancetype)init NS_UNAVAILABLE;
133*cc02d7e2SAndroid Build Coastguard Worker 
134*cc02d7e2SAndroid Build Coastguard Worker + (instancetype)new NS_UNAVAILABLE;
135*cc02d7e2SAndroid Build Coastguard Worker 
136*cc02d7e2SAndroid Build Coastguard Worker /**
137*cc02d7e2SAndroid Build Coastguard Worker  * Designated initializer for a call.
138*cc02d7e2SAndroid Build Coastguard Worker  * \param requestOptions Protobuf generated parameters for the call.
139*cc02d7e2SAndroid Build Coastguard Worker  * \param responseHandler The object to which responses should be issued.
140*cc02d7e2SAndroid Build Coastguard Worker  * \param callOptions Options for the call.
141*cc02d7e2SAndroid Build Coastguard Worker  */
142*cc02d7e2SAndroid Build Coastguard Worker - (instancetype)initWithRequestOptions:(GRPCRequestOptions *)requestOptions
143*cc02d7e2SAndroid Build Coastguard Worker                        responseHandler:(id<GRPCResponseHandler>)responseHandler
144*cc02d7e2SAndroid Build Coastguard Worker                            callOptions:(nullable GRPCCallOptions *)callOptions
145*cc02d7e2SAndroid Build Coastguard Worker     NS_DESIGNATED_INITIALIZER;
146*cc02d7e2SAndroid Build Coastguard Worker /**
147*cc02d7e2SAndroid Build Coastguard Worker  * Convenience initializer for a call that uses default call options (see GRPCCallOptions.m for
148*cc02d7e2SAndroid Build Coastguard Worker  * the default options).
149*cc02d7e2SAndroid Build Coastguard Worker  */
150*cc02d7e2SAndroid Build Coastguard Worker - (instancetype)initWithRequestOptions:(GRPCRequestOptions *)requestOptions
151*cc02d7e2SAndroid Build Coastguard Worker                        responseHandler:(id<GRPCResponseHandler>)responseHandler;
152*cc02d7e2SAndroid Build Coastguard Worker 
153*cc02d7e2SAndroid Build Coastguard Worker /**
154*cc02d7e2SAndroid Build Coastguard Worker  * Starts the call. This function must only be called once for each instance.
155*cc02d7e2SAndroid Build Coastguard Worker  */
156*cc02d7e2SAndroid Build Coastguard Worker - (void)start;
157*cc02d7e2SAndroid Build Coastguard Worker 
158*cc02d7e2SAndroid Build Coastguard Worker /**
159*cc02d7e2SAndroid Build Coastguard Worker  * Cancel the request of this call at best effort. It attempts to notify the server that the RPC
160*cc02d7e2SAndroid Build Coastguard Worker  * should be cancelled, and issue didCloseWithTrailingMetadata:error: callback with error code
161*cc02d7e2SAndroid Build Coastguard Worker  * CANCELED if no other error code has already been issued.
162*cc02d7e2SAndroid Build Coastguard Worker  */
163*cc02d7e2SAndroid Build Coastguard Worker - (void)cancel;
164*cc02d7e2SAndroid Build Coastguard Worker 
165*cc02d7e2SAndroid Build Coastguard Worker /**
166*cc02d7e2SAndroid Build Coastguard Worker  * Send a message to the server. The data is subject to marshaller serialization and compression
167*cc02d7e2SAndroid Build Coastguard Worker  * (marshaller is work in progress).
168*cc02d7e2SAndroid Build Coastguard Worker  */
169*cc02d7e2SAndroid Build Coastguard Worker - (void)writeData:(id)data;
170*cc02d7e2SAndroid Build Coastguard Worker 
171*cc02d7e2SAndroid Build Coastguard Worker /**
172*cc02d7e2SAndroid Build Coastguard Worker  * Finish the RPC request and half-close the call. The server may still send messages and/or
173*cc02d7e2SAndroid Build Coastguard Worker  * trailers to the client. The method must only be called once and after start is called.
174*cc02d7e2SAndroid Build Coastguard Worker  */
175*cc02d7e2SAndroid Build Coastguard Worker - (void)finish;
176*cc02d7e2SAndroid Build Coastguard Worker 
177*cc02d7e2SAndroid Build Coastguard Worker /**
178*cc02d7e2SAndroid Build Coastguard Worker  * Tell gRPC to receive the next N gRPC messages.
179*cc02d7e2SAndroid Build Coastguard Worker  *
180*cc02d7e2SAndroid Build Coastguard Worker  * This method should only be used when flow control is enabled. When flow control is not enabled,
181*cc02d7e2SAndroid Build Coastguard Worker  * this method is a no-op.
182*cc02d7e2SAndroid Build Coastguard Worker  */
183*cc02d7e2SAndroid Build Coastguard Worker - (void)receiveNextMessages:(NSUInteger)numberOfMessages;
184*cc02d7e2SAndroid Build Coastguard Worker 
185*cc02d7e2SAndroid Build Coastguard Worker /**
186*cc02d7e2SAndroid Build Coastguard Worker  * Get a copy of the original call options.
187*cc02d7e2SAndroid Build Coastguard Worker  */
188*cc02d7e2SAndroid Build Coastguard Worker @property(readonly, copy) GRPCCallOptions *callOptions;
189*cc02d7e2SAndroid Build Coastguard Worker 
190*cc02d7e2SAndroid Build Coastguard Worker /** Get a copy of the original request options. */
191*cc02d7e2SAndroid Build Coastguard Worker @property(readonly, copy) GRPCRequestOptions *requestOptions;
192*cc02d7e2SAndroid Build Coastguard Worker 
193*cc02d7e2SAndroid Build Coastguard Worker @end
194*cc02d7e2SAndroid Build Coastguard Worker 
195*cc02d7e2SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_END
196