xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/tests/Common/GRPCBlockCallbackResponseHandler.m (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker/**
2*cc02d7e2SAndroid Build Coastguard Worker * Copyright 2022 gRPC authors.
3*cc02d7e2SAndroid Build Coastguard Worker *
4*cc02d7e2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*cc02d7e2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*cc02d7e2SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*cc02d7e2SAndroid Build Coastguard Worker *
8*cc02d7e2SAndroid Build Coastguard Worker *     http://www.apache.org/licenses/LICENSE-2.0
9*cc02d7e2SAndroid Build Coastguard Worker *
10*cc02d7e2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*cc02d7e2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*cc02d7e2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*cc02d7e2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*cc02d7e2SAndroid Build Coastguard Worker * limitations under the License.
15*cc02d7e2SAndroid Build Coastguard Worker */
16*cc02d7e2SAndroid Build Coastguard Worker
17*cc02d7e2SAndroid Build Coastguard Worker#import "GRPCBlockCallbackResponseHandler.h"
18*cc02d7e2SAndroid Build Coastguard Worker
19*cc02d7e2SAndroid Build Coastguard Worker@implementation GRPCBlockCallbackResponseHandler {
20*cc02d7e2SAndroid Build Coastguard Worker  void (^_initialMetadataCallback)(NSDictionary *);
21*cc02d7e2SAndroid Build Coastguard Worker  void (^_messageCallback)(id);
22*cc02d7e2SAndroid Build Coastguard Worker  void (^_closeCallback)(NSDictionary *, NSError *);
23*cc02d7e2SAndroid Build Coastguard Worker  void (^_writeDataCallback)(void);
24*cc02d7e2SAndroid Build Coastguard Worker  dispatch_queue_t _dispatchQueue;
25*cc02d7e2SAndroid Build Coastguard Worker}
26*cc02d7e2SAndroid Build Coastguard Worker
27*cc02d7e2SAndroid Build Coastguard Worker- (instancetype)initWithInitialMetadataCallback:(void (^)(NSDictionary *))initialMetadataCallback
28*cc02d7e2SAndroid Build Coastguard Worker                                messageCallback:(void (^)(id))messageCallback
29*cc02d7e2SAndroid Build Coastguard Worker                                  closeCallback:(void (^)(NSDictionary *, NSError *))closeCallback
30*cc02d7e2SAndroid Build Coastguard Worker                              writeDataCallback:(void (^)(void))writeDataCallback {
31*cc02d7e2SAndroid Build Coastguard Worker  if ((self = [super init])) {
32*cc02d7e2SAndroid Build Coastguard Worker    _initialMetadataCallback = initialMetadataCallback;
33*cc02d7e2SAndroid Build Coastguard Worker    _messageCallback = messageCallback;
34*cc02d7e2SAndroid Build Coastguard Worker    _closeCallback = closeCallback;
35*cc02d7e2SAndroid Build Coastguard Worker    _writeDataCallback = writeDataCallback;
36*cc02d7e2SAndroid Build Coastguard Worker    _dispatchQueue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL);
37*cc02d7e2SAndroid Build Coastguard Worker  }
38*cc02d7e2SAndroid Build Coastguard Worker  return self;
39*cc02d7e2SAndroid Build Coastguard Worker}
40*cc02d7e2SAndroid Build Coastguard Worker
41*cc02d7e2SAndroid Build Coastguard Worker- (instancetype)initWithInitialMetadataCallback:(void (^)(NSDictionary *))initialMetadataCallback
42*cc02d7e2SAndroid Build Coastguard Worker                                messageCallback:(void (^)(id))messageCallback
43*cc02d7e2SAndroid Build Coastguard Worker                                  closeCallback:(void (^)(NSDictionary *, NSError *))closeCallback {
44*cc02d7e2SAndroid Build Coastguard Worker  return [self initWithInitialMetadataCallback:initialMetadataCallback
45*cc02d7e2SAndroid Build Coastguard Worker                               messageCallback:messageCallback
46*cc02d7e2SAndroid Build Coastguard Worker                                 closeCallback:closeCallback
47*cc02d7e2SAndroid Build Coastguard Worker                             writeDataCallback:nil];
48*cc02d7e2SAndroid Build Coastguard Worker}
49*cc02d7e2SAndroid Build Coastguard Worker
50*cc02d7e2SAndroid Build Coastguard Worker- (void)didReceiveInitialMetadata:(NSDictionary *)initialMetadata {
51*cc02d7e2SAndroid Build Coastguard Worker  if (self->_initialMetadataCallback) {
52*cc02d7e2SAndroid Build Coastguard Worker    self->_initialMetadataCallback(initialMetadata);
53*cc02d7e2SAndroid Build Coastguard Worker  }
54*cc02d7e2SAndroid Build Coastguard Worker}
55*cc02d7e2SAndroid Build Coastguard Worker
56*cc02d7e2SAndroid Build Coastguard Worker- (void)didReceiveRawMessage:(id)message {
57*cc02d7e2SAndroid Build Coastguard Worker  if (self->_messageCallback) {
58*cc02d7e2SAndroid Build Coastguard Worker    self->_messageCallback(message);
59*cc02d7e2SAndroid Build Coastguard Worker  }
60*cc02d7e2SAndroid Build Coastguard Worker}
61*cc02d7e2SAndroid Build Coastguard Worker
62*cc02d7e2SAndroid Build Coastguard Worker- (void)didCloseWithTrailingMetadata:(NSDictionary *)trailingMetadata error:(NSError *)error {
63*cc02d7e2SAndroid Build Coastguard Worker  if (self->_closeCallback) {
64*cc02d7e2SAndroid Build Coastguard Worker    self->_closeCallback(trailingMetadata, error);
65*cc02d7e2SAndroid Build Coastguard Worker  }
66*cc02d7e2SAndroid Build Coastguard Worker}
67*cc02d7e2SAndroid Build Coastguard Worker
68*cc02d7e2SAndroid Build Coastguard Worker- (void)didWriteData {
69*cc02d7e2SAndroid Build Coastguard Worker  if (self->_writeDataCallback) {
70*cc02d7e2SAndroid Build Coastguard Worker    self->_writeDataCallback();
71*cc02d7e2SAndroid Build Coastguard Worker  }
72*cc02d7e2SAndroid Build Coastguard Worker}
73*cc02d7e2SAndroid Build Coastguard Worker
74*cc02d7e2SAndroid Build Coastguard Worker- (dispatch_queue_t)dispatchQueue {
75*cc02d7e2SAndroid Build Coastguard Worker  return _dispatchQueue;
76*cc02d7e2SAndroid Build Coastguard Worker}
77*cc02d7e2SAndroid Build Coastguard Worker
78*cc02d7e2SAndroid Build Coastguard Worker@end
79