• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * Copyright 2018 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 <GRPCClient/GRPCCallOptions.h>
20 
21 NS_ASSUME_NONNULL_BEGIN
22 
23 @protocol GRPCChannel;
24 @class GRPCChannel;
25 @class GRPCChannelPool;
26 @class GRPCCompletionQueue;
27 @class GRPCChannelConfiguration;
28 @class GRPCWrappedCall;
29 
30 /**
31  * A proxied channel object that can be retained and used to create GRPCWrappedCall object
32  * regardless of the current connection status. If a connection is not established when a
33  * GRPCWrappedCall object is requested, it issues a connection/reconnection. This behavior is to
34  * follow that of gRPC core's channel object.
35  */
36 @interface GRPCPooledChannel : NSObject
37 
38 - (nullable instancetype)init NS_UNAVAILABLE;
39 
40 + (nullable instancetype)new NS_UNAVAILABLE;
41 
42 /**
43  * Initialize with an actual channel object \a channel and a reference to the channel pool.
44  */
45 - (nullable instancetype)initWithChannelConfiguration:
46     (GRPCChannelConfiguration *)channelConfiguration;
47 
48 /**
49  * Create a GRPCWrappedCall object (grpc_call) from this channel. If channel is disconnected, get a
50  * new channel object from the channel pool.
51  */
52 - (nullable GRPCWrappedCall *)wrappedCallWithPath:(NSString *)path
53                                   completionQueue:(GRPCCompletionQueue *)queue
54                                       callOptions:(GRPCCallOptions *)callOptions;
55 
56 /**
57  * Notify the pooled channel that a wrapped call object is no longer referenced and will be
58  * dealloc'ed.
59  */
60 - (void)notifyWrappedCallDealloc:(GRPCWrappedCall *)wrappedCall;
61 
62 /**
63  * Force the channel to disconnect immediately. GRPCWrappedCall objects previously created with
64  * \a wrappedCallWithPath are failed if not already finished. Subsequent calls to
65  * unmanagedCallWithPath: will attempt to reconnect to the remote channel.
66  */
67 - (void)disconnect;
68 
69 @end
70 
71 /**
72  * Manage the pool of connected channels. When a channel is no longer referenced by any call,
73  * destroy the channel after a certain period of time elapsed.
74  */
75 @interface GRPCChannelPool : NSObject
76 
77 - (nullable instancetype)init NS_UNAVAILABLE;
78 
79 + (nullable instancetype)new NS_UNAVAILABLE;
80 
81 /**
82  * Get the global channel pool.
83  */
84 + (nullable instancetype)sharedInstance;
85 
86 /**
87  * Return a channel with a particular configuration. The channel may be a cached channel.
88  */
89 - (nullable GRPCPooledChannel *)channelWithHost:(NSString *)host
90                                     callOptions:(GRPCCallOptions *)callOptions;
91 
92 /**
93  * Disconnect all channels in this pool.
94  */
95 - (void)disconnectAllChannels;
96 
97 @end
98 
99 NS_ASSUME_NONNULL_END
100