xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/ProtoRPC/ProtoRPC.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 legacy header for compatibility with users using the ProtoRPC interface
22*cc02d7e2SAndroid Build Coastguard Worker #import "ProtoRPCLegacy.h"
23*cc02d7e2SAndroid Build Coastguard Worker 
24*cc02d7e2SAndroid Build Coastguard Worker #import "ProtoMethod.h"
25*cc02d7e2SAndroid Build Coastguard Worker 
26*cc02d7e2SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_BEGIN
27*cc02d7e2SAndroid Build Coastguard Worker 
28*cc02d7e2SAndroid Build Coastguard Worker @class GRPCRequestOptions;
29*cc02d7e2SAndroid Build Coastguard Worker @class GRPCCallOptions;
30*cc02d7e2SAndroid Build Coastguard Worker @class GPBMessage;
31*cc02d7e2SAndroid Build Coastguard Worker 
32*cc02d7e2SAndroid Build Coastguard Worker /** An object can implement this protocol to receive responses from server from a call. */
33*cc02d7e2SAndroid Build Coastguard Worker @protocol GRPCProtoResponseHandler <NSObject>
34*cc02d7e2SAndroid Build Coastguard Worker 
35*cc02d7e2SAndroid Build Coastguard Worker @required
36*cc02d7e2SAndroid Build Coastguard Worker 
37*cc02d7e2SAndroid Build Coastguard Worker /**
38*cc02d7e2SAndroid Build Coastguard Worker  * All the responses must be issued to a user-provided dispatch queue. This property specifies the
39*cc02d7e2SAndroid Build Coastguard Worker  * dispatch queue to be used for issuing the notifications.
40*cc02d7e2SAndroid Build Coastguard Worker  */
41*cc02d7e2SAndroid Build Coastguard Worker @property(atomic, readonly) dispatch_queue_t dispatchQueue;
42*cc02d7e2SAndroid Build Coastguard Worker 
43*cc02d7e2SAndroid Build Coastguard Worker @optional
44*cc02d7e2SAndroid Build Coastguard Worker 
45*cc02d7e2SAndroid Build Coastguard Worker /**
46*cc02d7e2SAndroid Build Coastguard Worker  * Issued when initial metadata is received from the server.
47*cc02d7e2SAndroid Build Coastguard Worker  */
48*cc02d7e2SAndroid Build Coastguard Worker - (void)didReceiveInitialMetadata:(nullable NSDictionary *)initialMetadata;
49*cc02d7e2SAndroid Build Coastguard Worker 
50*cc02d7e2SAndroid Build Coastguard Worker /**
51*cc02d7e2SAndroid Build Coastguard Worker  * Issued when a message is received from the server. The message is the deserialized proto object.
52*cc02d7e2SAndroid Build Coastguard Worker  */
53*cc02d7e2SAndroid Build Coastguard Worker - (void)didReceiveProtoMessage:(nullable GPBMessage *)message;
54*cc02d7e2SAndroid Build Coastguard Worker 
55*cc02d7e2SAndroid Build Coastguard Worker /**
56*cc02d7e2SAndroid Build Coastguard Worker  * Issued when a call finished. If the call finished successfully, \p error is nil and \p
57*cc02d7e2SAndroid Build Coastguard Worker  * trailingMetadata consists any trailing metadata received from the server. Otherwise, \p error
58*cc02d7e2SAndroid Build Coastguard Worker  * is non-nil and contains the corresponding error information, including gRPC error codes and
59*cc02d7e2SAndroid Build Coastguard Worker  * error descriptions.
60*cc02d7e2SAndroid Build Coastguard Worker  */
61*cc02d7e2SAndroid Build Coastguard Worker - (void)didCloseWithTrailingMetadata:(nullable NSDictionary *)trailingMetadata
62*cc02d7e2SAndroid Build Coastguard Worker                                error:(nullable NSError *)error;
63*cc02d7e2SAndroid Build Coastguard Worker 
64*cc02d7e2SAndroid Build Coastguard Worker /**
65*cc02d7e2SAndroid Build Coastguard Worker  * Issued when flow control is enabled for the call and a message (written with writeMessage: method
66*cc02d7e2SAndroid Build Coastguard Worker  * of GRPCStreamingProtoCall or the initializer of GRPCUnaryProtoCall) is passed to gRPC core with
67*cc02d7e2SAndroid Build Coastguard Worker  * SEND_MESSAGE operation.
68*cc02d7e2SAndroid Build Coastguard Worker  */
69*cc02d7e2SAndroid Build Coastguard Worker - (void)didWriteMessage;
70*cc02d7e2SAndroid Build Coastguard Worker 
71*cc02d7e2SAndroid Build Coastguard Worker @end
72*cc02d7e2SAndroid Build Coastguard Worker 
73*cc02d7e2SAndroid Build Coastguard Worker /**
74*cc02d7e2SAndroid Build Coastguard Worker  * A convenience class of objects that act as response handlers of calls. Issues
75*cc02d7e2SAndroid Build Coastguard Worker  * response to a single handler when the response is completed.
76*cc02d7e2SAndroid Build Coastguard Worker  *
77*cc02d7e2SAndroid Build Coastguard Worker  * The object is stateful and should not be reused for multiple calls. If multiple calls share the
78*cc02d7e2SAndroid Build Coastguard Worker  * same response handling logic, create separate GRPCUnaryResponseHandler objects for each call.
79*cc02d7e2SAndroid Build Coastguard Worker  */
80*cc02d7e2SAndroid Build Coastguard Worker @interface GRPCUnaryResponseHandler<ResponseType> : NSObject <GRPCProtoResponseHandler>
81*cc02d7e2SAndroid Build Coastguard Worker 
82*cc02d7e2SAndroid Build Coastguard Worker /**
83*cc02d7e2SAndroid Build Coastguard Worker  * Creates a responsehandler object with a unary call handler.
84*cc02d7e2SAndroid Build Coastguard Worker  *
85*cc02d7e2SAndroid Build Coastguard Worker  * responseHandler: The unary handler to be called when the call is completed.
86*cc02d7e2SAndroid Build Coastguard Worker  * responseDispatchQueue: the dispatch queue on which the response handler
87*cc02d7e2SAndroid Build Coastguard Worker  * should be issued. If it's nil, the handler will use the main queue.
88*cc02d7e2SAndroid Build Coastguard Worker  */
89*cc02d7e2SAndroid Build Coastguard Worker - (nullable instancetype)initWithResponseHandler:(void (^)(ResponseType, NSError *))handler
90*cc02d7e2SAndroid Build Coastguard Worker                            responseDispatchQueue:(nullable dispatch_queue_t)dispatchQueue;
91*cc02d7e2SAndroid Build Coastguard Worker 
92*cc02d7e2SAndroid Build Coastguard Worker /** Response headers received during the call. */
93*cc02d7e2SAndroid Build Coastguard Worker @property(readonly, nullable) NSDictionary *responseHeaders;
94*cc02d7e2SAndroid Build Coastguard Worker 
95*cc02d7e2SAndroid Build Coastguard Worker /** Response trailers received during the call. */
96*cc02d7e2SAndroid Build Coastguard Worker @property(readonly, nullable) NSDictionary *responseTrailers;
97*cc02d7e2SAndroid Build Coastguard Worker 
98*cc02d7e2SAndroid Build Coastguard Worker @end
99*cc02d7e2SAndroid Build Coastguard Worker 
100*cc02d7e2SAndroid Build Coastguard Worker /** A unary-request RPC call with Protobuf. */
101*cc02d7e2SAndroid Build Coastguard Worker @interface GRPCUnaryProtoCall : NSObject
102*cc02d7e2SAndroid Build Coastguard Worker 
103*cc02d7e2SAndroid Build Coastguard Worker - (instancetype)init NS_UNAVAILABLE;
104*cc02d7e2SAndroid Build Coastguard Worker 
105*cc02d7e2SAndroid Build Coastguard Worker + (instancetype)new NS_UNAVAILABLE;
106*cc02d7e2SAndroid Build Coastguard Worker 
107*cc02d7e2SAndroid Build Coastguard Worker /**
108*cc02d7e2SAndroid Build Coastguard Worker  * Users should not use this initializer directly. Call objects will be created, initialized, and
109*cc02d7e2SAndroid Build Coastguard Worker  * returned to users by methods of the generated service.
110*cc02d7e2SAndroid Build Coastguard Worker  */
111*cc02d7e2SAndroid Build Coastguard Worker - (nullable instancetype)initWithRequestOptions:(GRPCRequestOptions *)requestOptions
112*cc02d7e2SAndroid Build Coastguard Worker                                         message:(GPBMessage *)message
113*cc02d7e2SAndroid Build Coastguard Worker                                 responseHandler:(id<GRPCProtoResponseHandler>)handler
114*cc02d7e2SAndroid Build Coastguard Worker                                     callOptions:(nullable GRPCCallOptions *)callOptions
115*cc02d7e2SAndroid Build Coastguard Worker                                   responseClass:(Class)responseClass NS_DESIGNATED_INITIALIZER;
116*cc02d7e2SAndroid Build Coastguard Worker 
117*cc02d7e2SAndroid Build Coastguard Worker /**
118*cc02d7e2SAndroid Build Coastguard Worker  * Start the call. This function must only be called once for each instance.
119*cc02d7e2SAndroid Build Coastguard Worker  */
120*cc02d7e2SAndroid Build Coastguard Worker - (void)start;
121*cc02d7e2SAndroid Build Coastguard Worker 
122*cc02d7e2SAndroid Build Coastguard Worker /**
123*cc02d7e2SAndroid Build Coastguard Worker  * Cancel the request of this call at best effort. It attempts to notify the server that the RPC
124*cc02d7e2SAndroid Build Coastguard Worker  * should be cancelled, and issue didCloseWithTrailingMetadata:error: callback with error code
125*cc02d7e2SAndroid Build Coastguard Worker  * CANCELED if no other error code has already been issued.
126*cc02d7e2SAndroid Build Coastguard Worker  */
127*cc02d7e2SAndroid Build Coastguard Worker - (void)cancel;
128*cc02d7e2SAndroid Build Coastguard Worker 
129*cc02d7e2SAndroid Build Coastguard Worker @end
130*cc02d7e2SAndroid Build Coastguard Worker 
131*cc02d7e2SAndroid Build Coastguard Worker /** A client-streaming RPC call with Protobuf. */
132*cc02d7e2SAndroid Build Coastguard Worker @interface GRPCStreamingProtoCall : NSObject
133*cc02d7e2SAndroid Build Coastguard Worker 
134*cc02d7e2SAndroid Build Coastguard Worker - (instancetype)init NS_UNAVAILABLE;
135*cc02d7e2SAndroid Build Coastguard Worker 
136*cc02d7e2SAndroid Build Coastguard Worker + (instancetype)new NS_UNAVAILABLE;
137*cc02d7e2SAndroid Build Coastguard Worker 
138*cc02d7e2SAndroid Build Coastguard Worker /**
139*cc02d7e2SAndroid Build Coastguard Worker  * Users should not use this initializer directly. Call objects will be created, initialized, and
140*cc02d7e2SAndroid Build Coastguard Worker  * returned to users by methods of the generated service.
141*cc02d7e2SAndroid Build Coastguard Worker  */
142*cc02d7e2SAndroid Build Coastguard Worker - (nullable instancetype)initWithRequestOptions:(GRPCRequestOptions *)requestOptions
143*cc02d7e2SAndroid Build Coastguard Worker                                 responseHandler:(id<GRPCProtoResponseHandler>)handler
144*cc02d7e2SAndroid Build Coastguard Worker                                     callOptions:(nullable GRPCCallOptions *)callOptions
145*cc02d7e2SAndroid Build Coastguard Worker                                   responseClass:(Class)responseClass NS_DESIGNATED_INITIALIZER;
146*cc02d7e2SAndroid Build Coastguard Worker 
147*cc02d7e2SAndroid Build Coastguard Worker /**
148*cc02d7e2SAndroid Build Coastguard Worker  * Start the call. This function must only be called once for each instance.
149*cc02d7e2SAndroid Build Coastguard Worker  */
150*cc02d7e2SAndroid Build Coastguard Worker - (void)start;
151*cc02d7e2SAndroid Build Coastguard Worker 
152*cc02d7e2SAndroid Build Coastguard Worker /**
153*cc02d7e2SAndroid Build Coastguard Worker  * Cancel the request of this call at best effort. It attempts to notify the server that the RPC
154*cc02d7e2SAndroid Build Coastguard Worker  * should be cancelled, and issue didCloseWithTrailingMetadata:error: callback with error code
155*cc02d7e2SAndroid Build Coastguard Worker  * CANCELED if no other error code has already been issued.
156*cc02d7e2SAndroid Build Coastguard Worker  */
157*cc02d7e2SAndroid Build Coastguard Worker - (void)cancel;
158*cc02d7e2SAndroid Build Coastguard Worker 
159*cc02d7e2SAndroid Build Coastguard Worker /**
160*cc02d7e2SAndroid Build Coastguard Worker  * Send a message to the server. The message should be a Protobuf message which will be serialized
161*cc02d7e2SAndroid Build Coastguard Worker  * internally.
162*cc02d7e2SAndroid Build Coastguard Worker  */
163*cc02d7e2SAndroid Build Coastguard Worker - (void)writeMessage:(GPBMessage *)message;
164*cc02d7e2SAndroid Build Coastguard Worker 
165*cc02d7e2SAndroid Build Coastguard Worker /**
166*cc02d7e2SAndroid Build Coastguard Worker  * Finish the RPC request and half-close the call. The server may still send messages and/or
167*cc02d7e2SAndroid Build Coastguard Worker  * trailers to the client.
168*cc02d7e2SAndroid Build Coastguard Worker  */
169*cc02d7e2SAndroid Build Coastguard Worker - (void)finish;
170*cc02d7e2SAndroid Build Coastguard Worker 
171*cc02d7e2SAndroid Build Coastguard Worker /**
172*cc02d7e2SAndroid Build Coastguard Worker  * Tell gRPC to receive another message.
173*cc02d7e2SAndroid Build Coastguard Worker  *
174*cc02d7e2SAndroid Build Coastguard Worker  * This method should only be used when flow control is enabled. If flow control is enabled, gRPC
175*cc02d7e2SAndroid Build Coastguard Worker  * will only receive additional messages after the user indicates so by using either
176*cc02d7e2SAndroid Build Coastguard Worker  * receiveNextMessage: or receiveNextMessages: methods. If flow control is not enabled, messages
177*cc02d7e2SAndroid Build Coastguard Worker  * will be automatically received after the previous one is delivered.
178*cc02d7e2SAndroid Build Coastguard Worker  */
179*cc02d7e2SAndroid Build Coastguard Worker - (void)receiveNextMessage;
180*cc02d7e2SAndroid Build Coastguard Worker 
181*cc02d7e2SAndroid Build Coastguard Worker /**
182*cc02d7e2SAndroid Build Coastguard Worker  * Tell gRPC to receive another N message.
183*cc02d7e2SAndroid Build Coastguard Worker  *
184*cc02d7e2SAndroid Build Coastguard Worker  * This method should only be used when flow control is enabled. If flow control is enabled, the
185*cc02d7e2SAndroid Build Coastguard Worker  * messages received from the server are buffered in gRPC until the user want to receive the next
186*cc02d7e2SAndroid Build Coastguard Worker  * message. If flow control is not enabled, messages will be automatically received after the
187*cc02d7e2SAndroid Build Coastguard Worker  * previous one is delivered.
188*cc02d7e2SAndroid Build Coastguard Worker  */
189*cc02d7e2SAndroid Build Coastguard Worker - (void)receiveNextMessages:(NSUInteger)numberOfMessages;
190*cc02d7e2SAndroid Build Coastguard Worker 
191*cc02d7e2SAndroid Build Coastguard Worker @end
192*cc02d7e2SAndroid Build Coastguard Worker 
193*cc02d7e2SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_END
194