aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objective-c/GRPCClient/private/GRPCChannelPool.h
diff options
context:
space:
mode:
authorGravatar Muxi Yan <mxyan@google.com>2018-10-08 15:52:27 -0700
committerGravatar Muxi Yan <mxyan@google.com>2018-10-08 15:52:27 -0700
commit309ba191525a96c5314e5762ecaa2fffbc9eccbb (patch)
treeff431202f113bf6b11bac5a48282fa8394faccf3 /src/objective-c/GRPCClient/private/GRPCChannelPool.h
parent0fd4727defda5f8bef106a1f3b59263886b9b6c6 (diff)
Channel pool
Diffstat (limited to 'src/objective-c/GRPCClient/private/GRPCChannelPool.h')
-rw-r--r--src/objective-c/GRPCClient/private/GRPCChannelPool.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/objective-c/GRPCClient/private/GRPCChannelPool.h b/src/objective-c/GRPCClient/private/GRPCChannelPool.h
new file mode 100644
index 0000000000..1145039549
--- /dev/null
+++ b/src/objective-c/GRPCClient/private/GRPCChannelPool.h
@@ -0,0 +1,69 @@
+/*
+ *
+ * Copyright 2018 gRPC authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ * Signature for the channel. If two channel's signatures are the same, they share the same
+ * underlying \a GRPCChannel object.
+ */
+
+#import <GRPCClient/GRPCCallOptions.h>
+
+#import "GRPCChannelFactory.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class GRPCChannel;
+
+@interface GRPCChannelConfiguration : NSObject<NSCopying>
+
+@property(atomic, strong, readwrite) NSString *host;
+@property(atomic, strong, readwrite) GRPCCallOptions *callOptions;
+
+@property(readonly) id<GRPCChannelFactory> channelFactory;
+@property(readonly) NSMutableDictionary *channelArgs;
+
+- (nullable instancetype)initWithHost:(NSString *)host callOptions:(GRPCCallOptions *)callOptions;
+
+@end
+
+/**
+ * Manage the pool of connected channels. When a channel is no longer referenced by any call,
+ * destroy the channel after a certain period of time elapsed.
+ */
+@interface GRPCChannelPool : NSObject
+
+- (instancetype)init;
+
+- (instancetype)initWithChannelDestroyDelay:(NSTimeInterval)channelDestroyDelay;
+
+/**
+ * Return a channel with a particular configuration. If the channel does not exist, execute \a
+ * createChannel then add it in the pool. If the channel exists, increase its reference count.
+ */
+- (GRPCChannel *)channelWithConfiguration:(GRPCChannelConfiguration *)configuration
+ createChannel:(GRPCChannel * (^)(void))createChannel;
+
+/** Decrease a channel's refcount. */
+- (void)unrefChannelWithConfiguration:configuration;
+
+/** Clear all channels in the pool. */
+- (void)clear;
+
+@end
+
+NS_ASSUME_NONNULL_END