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