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