• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 *
3 * Copyright 2016 gRPC authors.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 */
18
19#import <UIKit/UIKit.h>
20
21#import <GRPCClient/GRPCCall.h>
22#import <ProtoRPC/ProtoMethod.h>
23#import <RxLibrary/GRXBufferedPipe.h>
24#import <RxLibrary/GRXWriter+Immediate.h>
25#import <RxLibrary/GRXWriter+Transformations.h>
26
27NSString *host = @"grpc-test.sandbox.googleapis.com";
28
29@interface ViewController : UIViewController
30@end
31
32@implementation ViewController
33- (void)viewDidLoad {
34  [super viewDidLoad];
35}
36
37- (void)reachabilityChanged:(NSNotification *)note {
38  NSLog(@"Reachability changed\n");
39}
40
41- (IBAction)tapUnary:(id)sender {
42  // Create a unary call
43
44  // A trivial proto message to generate a response
45  char bytes[] = {0x10, 0x05, 0x1A, 0x07, 0x12, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00};
46
47  GRPCProtoMethod *method = [[GRPCProtoMethod alloc] initWithPackage:@"grpc.testing"
48                                                             service:@"TestService"
49                                                              method:@"UnaryCall"];
50  GRXWriter *loggingRequestWriter =
51      [[GRXWriter writerWithValue:[NSData dataWithBytes:bytes
52                                                 length:sizeof(bytes)]] map:^id(id value) {
53        NSLog(@"Sending request.");
54        return value;
55      }];
56  GRPCCall *call = [[GRPCCall alloc] initWithHost:host
57                                             path:method.HTTPPath
58                                   requestsWriter:loggingRequestWriter];
59
60  [call startWithWriteable:[GRXWriteable
61                               writeableWithEventHandler:^(BOOL done, id value, NSError *error) {
62                                 if (!done) {
63                                   return;
64                                 }
65                                 NSLog(@"Unary call finished with error: %@", error);
66                               }]];
67}
68
69- (IBAction)tapStreaming:(id)sender {
70  // Create a streaming call
71
72  // A trivial proto message to generate a response
73  char bytes[] = {0x12, 0x02, 0x08, 0x02, 0x1A, 0x04, 0x12, 0x02, 0x00, 0x00};
74
75  GRPCProtoMethod *method = [[GRPCProtoMethod alloc] initWithPackage:@"grpc.testing"
76                                                             service:@"TestService"
77                                                              method:@"FullDuplexCall"];
78
79  GRXBufferedPipe *requestsBuffer = [[GRXBufferedPipe alloc] init];
80
81  [requestsBuffer writeValue:[NSData dataWithBytes:bytes length:sizeof(bytes)]];
82
83  GRPCCall *call = [[GRPCCall alloc] initWithHost:host
84                                             path:method.HTTPPath
85                                   requestsWriter:requestsBuffer];
86
87  [call startWithWriteable:[GRXWriteable
88                               writeableWithEventHandler:^(BOOL done, id value, NSError *error) {
89                                 if (!done) {
90                                   return;
91                                 }
92                                 NSLog(@"Streaming call finished with error: %@", error);
93                               }]];
94}
95
96@end
97