xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/manual_tests/ViewController.m (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker/*
2*cc02d7e2SAndroid Build Coastguard Worker *
3*cc02d7e2SAndroid Build Coastguard Worker * Copyright 2019 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 <UIKit/UIKit.h>
20*cc02d7e2SAndroid Build Coastguard Worker
21*cc02d7e2SAndroid Build Coastguard Worker#import <GRPCClient/GRPCCall.h>
22*cc02d7e2SAndroid Build Coastguard Worker#import <GRPCClient/GRPCCallOptions.h>
23*cc02d7e2SAndroid Build Coastguard Worker#import "src/objective-c/tests/RemoteTestClient/Messages.pbobjc.h"
24*cc02d7e2SAndroid Build Coastguard Worker#import "src/objective-c/tests/RemoteTestClient/Test.pbrpc.h"
25*cc02d7e2SAndroid Build Coastguard Worker
26*cc02d7e2SAndroid Build Coastguard WorkerNSString *const kRemoteHost = @"grpc-test.sandbox.googleapis.com";
27*cc02d7e2SAndroid Build Coastguard Workerconst int32_t kMessageSize = 100;
28*cc02d7e2SAndroid Build Coastguard Worker
29*cc02d7e2SAndroid Build Coastguard Worker@interface ViewController : UIViewController <GRPCProtoResponseHandler>
30*cc02d7e2SAndroid Build Coastguard Worker@property(strong, nonatomic) UILabel *callStatusLabel;
31*cc02d7e2SAndroid Build Coastguard Worker@property(strong, nonatomic) UILabel *callCountLabel;
32*cc02d7e2SAndroid Build Coastguard Worker@end
33*cc02d7e2SAndroid Build Coastguard Worker
34*cc02d7e2SAndroid Build Coastguard Worker@implementation ViewController {
35*cc02d7e2SAndroid Build Coastguard Worker  RMTTestService *_service;
36*cc02d7e2SAndroid Build Coastguard Worker  dispatch_queue_t _dispatchQueue;
37*cc02d7e2SAndroid Build Coastguard Worker  GRPCStreamingProtoCall *_call;
38*cc02d7e2SAndroid Build Coastguard Worker  int _calls_completed;
39*cc02d7e2SAndroid Build Coastguard Worker}
40*cc02d7e2SAndroid Build Coastguard Worker- (instancetype)init {
41*cc02d7e2SAndroid Build Coastguard Worker  self = [super init];
42*cc02d7e2SAndroid Build Coastguard Worker  _calls_completed = 0;
43*cc02d7e2SAndroid Build Coastguard Worker  return self;
44*cc02d7e2SAndroid Build Coastguard Worker}
45*cc02d7e2SAndroid Build Coastguard Worker
46*cc02d7e2SAndroid Build Coastguard Worker- (void)viewDidLoad {
47*cc02d7e2SAndroid Build Coastguard Worker  [super viewDidLoad];
48*cc02d7e2SAndroid Build Coastguard Worker  _dispatchQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
49*cc02d7e2SAndroid Build Coastguard Worker  _callStatusLabel = (UILabel *)[self.view viewWithTag:1];
50*cc02d7e2SAndroid Build Coastguard Worker  _callCountLabel = (UILabel *)[self.view viewWithTag:2];
51*cc02d7e2SAndroid Build Coastguard Worker}
52*cc02d7e2SAndroid Build Coastguard Worker
53*cc02d7e2SAndroid Build Coastguard Worker- (void)startUnaryCall {
54*cc02d7e2SAndroid Build Coastguard Worker  if (_service == nil) {
55*cc02d7e2SAndroid Build Coastguard Worker    _service = [RMTTestService serviceWithHost:kRemoteHost];
56*cc02d7e2SAndroid Build Coastguard Worker  }
57*cc02d7e2SAndroid Build Coastguard Worker  dispatch_async(dispatch_get_main_queue(), ^{
58*cc02d7e2SAndroid Build Coastguard Worker    self->_callStatusLabel.text = @"";
59*cc02d7e2SAndroid Build Coastguard Worker  });
60*cc02d7e2SAndroid Build Coastguard Worker
61*cc02d7e2SAndroid Build Coastguard Worker  // Set up request proto message
62*cc02d7e2SAndroid Build Coastguard Worker  RMTSimpleRequest *request = [RMTSimpleRequest message];
63*cc02d7e2SAndroid Build Coastguard Worker  request.responseType = RMTPayloadType_Compressable;
64*cc02d7e2SAndroid Build Coastguard Worker  request.responseSize = kMessageSize;
65*cc02d7e2SAndroid Build Coastguard Worker  request.payload.body = [NSMutableData dataWithLength:kMessageSize];
66*cc02d7e2SAndroid Build Coastguard Worker
67*cc02d7e2SAndroid Build Coastguard Worker  GRPCUnaryProtoCall *call = [_service unaryCallWithMessage:request
68*cc02d7e2SAndroid Build Coastguard Worker                                            responseHandler:self
69*cc02d7e2SAndroid Build Coastguard Worker                                                callOptions:nil];
70*cc02d7e2SAndroid Build Coastguard Worker
71*cc02d7e2SAndroid Build Coastguard Worker  [call start];
72*cc02d7e2SAndroid Build Coastguard Worker}
73*cc02d7e2SAndroid Build Coastguard Worker
74*cc02d7e2SAndroid Build Coastguard Worker- (IBAction)tapUnaryCall:(id)sender {
75*cc02d7e2SAndroid Build Coastguard Worker  NSLog(@"In tapUnaryCall");
76*cc02d7e2SAndroid Build Coastguard Worker  [self startUnaryCall];
77*cc02d7e2SAndroid Build Coastguard Worker}
78*cc02d7e2SAndroid Build Coastguard Worker
79*cc02d7e2SAndroid Build Coastguard Worker- (IBAction)tap10UnaryCalls:(id)sender {
80*cc02d7e2SAndroid Build Coastguard Worker  NSLog(@"In tap10UnaryCalls");
81*cc02d7e2SAndroid Build Coastguard Worker  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
82*cc02d7e2SAndroid Build Coastguard Worker    // Background thread
83*cc02d7e2SAndroid Build Coastguard Worker    for (int i = 0; i < 10; ++i) {
84*cc02d7e2SAndroid Build Coastguard Worker      [self startUnaryCall];
85*cc02d7e2SAndroid Build Coastguard Worker      [NSThread sleepForTimeInterval:0.5];
86*cc02d7e2SAndroid Build Coastguard Worker    }
87*cc02d7e2SAndroid Build Coastguard Worker  });
88*cc02d7e2SAndroid Build Coastguard Worker}
89*cc02d7e2SAndroid Build Coastguard Worker
90*cc02d7e2SAndroid Build Coastguard Worker- (IBAction)resetCounter:(id)sender {
91*cc02d7e2SAndroid Build Coastguard Worker  _calls_completed = 0;
92*cc02d7e2SAndroid Build Coastguard Worker  dispatch_async(dispatch_get_main_queue(), ^{
93*cc02d7e2SAndroid Build Coastguard Worker    self->_callCountLabel.text =
94*cc02d7e2SAndroid Build Coastguard Worker        [NSString stringWithFormat:@"Calls completed: %d", self->_calls_completed];
95*cc02d7e2SAndroid Build Coastguard Worker    self->_callStatusLabel.text = @"";
96*cc02d7e2SAndroid Build Coastguard Worker  });
97*cc02d7e2SAndroid Build Coastguard Worker}
98*cc02d7e2SAndroid Build Coastguard Worker
99*cc02d7e2SAndroid Build Coastguard Worker- (IBAction)tapStreamingCallStart:(id)sender {
100*cc02d7e2SAndroid Build Coastguard Worker  NSLog(@"In tapStreamingCallStart");
101*cc02d7e2SAndroid Build Coastguard Worker  if (_service == nil) {
102*cc02d7e2SAndroid Build Coastguard Worker    _service = [RMTTestService serviceWithHost:kRemoteHost];
103*cc02d7e2SAndroid Build Coastguard Worker  }
104*cc02d7e2SAndroid Build Coastguard Worker  dispatch_async(dispatch_get_main_queue(), ^{
105*cc02d7e2SAndroid Build Coastguard Worker    self->_callStatusLabel.text = @"";
106*cc02d7e2SAndroid Build Coastguard Worker  });
107*cc02d7e2SAndroid Build Coastguard Worker
108*cc02d7e2SAndroid Build Coastguard Worker  // Set up request proto message
109*cc02d7e2SAndroid Build Coastguard Worker  RMTStreamingOutputCallRequest *request = RMTStreamingOutputCallRequest.message;
110*cc02d7e2SAndroid Build Coastguard Worker  RMTResponseParameters *parameters = [RMTResponseParameters message];
111*cc02d7e2SAndroid Build Coastguard Worker  parameters.size = kMessageSize;
112*cc02d7e2SAndroid Build Coastguard Worker  [request.responseParametersArray addObject:parameters];
113*cc02d7e2SAndroid Build Coastguard Worker  request.payload.body = [NSMutableData dataWithLength:kMessageSize];
114*cc02d7e2SAndroid Build Coastguard Worker
115*cc02d7e2SAndroid Build Coastguard Worker  GRPCStreamingProtoCall *call = [_service fullDuplexCallWithResponseHandler:self callOptions:nil];
116*cc02d7e2SAndroid Build Coastguard Worker  [call start];
117*cc02d7e2SAndroid Build Coastguard Worker  _call = call;
118*cc02d7e2SAndroid Build Coastguard Worker  // display something to confirm the tester the call is started
119*cc02d7e2SAndroid Build Coastguard Worker}
120*cc02d7e2SAndroid Build Coastguard Worker
121*cc02d7e2SAndroid Build Coastguard Worker- (IBAction)tapStreamingCallSend:(id)sender {
122*cc02d7e2SAndroid Build Coastguard Worker  NSLog(@"In tapStreamingCallSend");
123*cc02d7e2SAndroid Build Coastguard Worker  if (_call == nil) return;
124*cc02d7e2SAndroid Build Coastguard Worker
125*cc02d7e2SAndroid Build Coastguard Worker  RMTStreamingOutputCallRequest *request = RMTStreamingOutputCallRequest.message;
126*cc02d7e2SAndroid Build Coastguard Worker  RMTResponseParameters *parameters = [RMTResponseParameters message];
127*cc02d7e2SAndroid Build Coastguard Worker  parameters.size = kMessageSize;
128*cc02d7e2SAndroid Build Coastguard Worker  [request.responseParametersArray addObject:parameters];
129*cc02d7e2SAndroid Build Coastguard Worker  request.payload.body = [NSMutableData dataWithLength:kMessageSize];
130*cc02d7e2SAndroid Build Coastguard Worker
131*cc02d7e2SAndroid Build Coastguard Worker  [_call writeMessage:request];
132*cc02d7e2SAndroid Build Coastguard Worker}
133*cc02d7e2SAndroid Build Coastguard Worker
134*cc02d7e2SAndroid Build Coastguard Worker- (IBAction)tapStreamingCallStop:(id)sender {
135*cc02d7e2SAndroid Build Coastguard Worker  NSLog(@"In tapStreamingCallStop");
136*cc02d7e2SAndroid Build Coastguard Worker  if (_call == nil) return;
137*cc02d7e2SAndroid Build Coastguard Worker
138*cc02d7e2SAndroid Build Coastguard Worker  [_call finish];
139*cc02d7e2SAndroid Build Coastguard Worker  _call = nil;
140*cc02d7e2SAndroid Build Coastguard Worker}
141*cc02d7e2SAndroid Build Coastguard Worker
142*cc02d7e2SAndroid Build Coastguard Worker- (void)didReceiveInitialMetadata:(NSDictionary *)initialMetadata {
143*cc02d7e2SAndroid Build Coastguard Worker  NSLog(@"Recv initial metadata: %@", initialMetadata);
144*cc02d7e2SAndroid Build Coastguard Worker}
145*cc02d7e2SAndroid Build Coastguard Worker
146*cc02d7e2SAndroid Build Coastguard Worker- (void)didReceiveProtoMessage:(GPBMessage *)message {
147*cc02d7e2SAndroid Build Coastguard Worker  NSLog(@"Recv message: %@", message);
148*cc02d7e2SAndroid Build Coastguard Worker}
149*cc02d7e2SAndroid Build Coastguard Worker
150*cc02d7e2SAndroid Build Coastguard Worker- (void)didCloseWithTrailingMetadata:(NSDictionary *)trailingMetadata
151*cc02d7e2SAndroid Build Coastguard Worker                               error:(nullable NSError *)error {
152*cc02d7e2SAndroid Build Coastguard Worker  NSLog(@"Recv trailing metadata: %@, error: %@", trailingMetadata, error);
153*cc02d7e2SAndroid Build Coastguard Worker  if (error == nil) {
154*cc02d7e2SAndroid Build Coastguard Worker    dispatch_async(dispatch_get_main_queue(), ^{
155*cc02d7e2SAndroid Build Coastguard Worker      self->_callStatusLabel.text = @"Call done";
156*cc02d7e2SAndroid Build Coastguard Worker    });
157*cc02d7e2SAndroid Build Coastguard Worker  } else {
158*cc02d7e2SAndroid Build Coastguard Worker    dispatch_async(dispatch_get_main_queue(), ^{
159*cc02d7e2SAndroid Build Coastguard Worker      self->_callStatusLabel.text = @"Call failed";
160*cc02d7e2SAndroid Build Coastguard Worker    });
161*cc02d7e2SAndroid Build Coastguard Worker  }
162*cc02d7e2SAndroid Build Coastguard Worker  ++_calls_completed;
163*cc02d7e2SAndroid Build Coastguard Worker  dispatch_async(dispatch_get_main_queue(), ^{
164*cc02d7e2SAndroid Build Coastguard Worker    self->_callCountLabel.text =
165*cc02d7e2SAndroid Build Coastguard Worker        [NSString stringWithFormat:@"Calls completed: %d", self->_calls_completed];
166*cc02d7e2SAndroid Build Coastguard Worker  });
167*cc02d7e2SAndroid Build Coastguard Worker}
168*cc02d7e2SAndroid Build Coastguard Worker
169*cc02d7e2SAndroid Build Coastguard Worker- (dispatch_queue_t)dispatchQueue {
170*cc02d7e2SAndroid Build Coastguard Worker  return _dispatchQueue;
171*cc02d7e2SAndroid Build Coastguard Worker}
172*cc02d7e2SAndroid Build Coastguard Worker
173*cc02d7e2SAndroid Build Coastguard Worker@end
174