aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objective-c/GRPCClient/private/GRPCChannel.m
diff options
context:
space:
mode:
Diffstat (limited to 'src/objective-c/GRPCClient/private/GRPCChannel.m')
-rw-r--r--src/objective-c/GRPCClient/private/GRPCChannel.m56
1 files changed, 8 insertions, 48 deletions
diff --git a/src/objective-c/GRPCClient/private/GRPCChannel.m b/src/objective-c/GRPCClient/private/GRPCChannel.m
index af4326332f..4366e63320 100644
--- a/src/objective-c/GRPCClient/private/GRPCChannel.m
+++ b/src/objective-c/GRPCClient/private/GRPCChannel.m
@@ -35,53 +35,17 @@
#include <grpc/grpc.h>
-#import "GRPCSecureChannel.h"
-#import "GRPCUnsecuredChannel.h"
-
@implementation GRPCChannel
-+ (instancetype)channelToHost:(NSString *)host {
- // TODO(mlumish): Investigate whether a cache with strong links is a good idea
- static NSMutableDictionary *channelCache;
- static dispatch_once_t cacheInitialization;
- dispatch_once(&cacheInitialization, ^{
- channelCache = [NSMutableDictionary dictionary];
- });
- GRPCChannel *channel = channelCache[host];
- if (!channel) {
- channel = [[self alloc] initWithHost:host];
- channelCache[host] = channel;
- }
- return channel;
-}
-
- (instancetype)init {
- return [self initWithHost:nil];
+ return [self initWithChannel:NULL];
}
-- (instancetype)initWithHost:(NSString *)host {
- if (![host rangeOfString:@"://"].length) {
- // No scheme provided; assume https.
- host = [@"https://" stringByAppendingString:host];
- }
- NSURL *hostURL = [NSURL URLWithString:host];
- if (!hostURL) {
- [NSException raise:NSInvalidArgumentException format:@"Invalid URL: %@", host];
+// Designated initializer
+- (instancetype)initWithChannel:(grpc_channel *)unmanagedChannel {
+ if (!unmanagedChannel) {
+ return nil;
}
- if ([hostURL.scheme isEqualToString:@"https"]) {
- host = [@[hostURL.host, hostURL.port ?: @443] componentsJoinedByString:@":"];
- return [[GRPCSecureChannel alloc] initWithHost:host];
- }
- if ([hostURL.scheme isEqualToString:@"http"]) {
- host = [@[hostURL.host, hostURL.port ?: @80] componentsJoinedByString:@":"];
- return [[GRPCUnsecuredChannel alloc] initWithHost:host];
- }
- [NSException raise:NSInvalidArgumentException
- format:@"URL scheme %@ isn't supported.", hostURL.scheme];
- return nil; // silence warning.
-}
-
-- (instancetype)initWithChannel:(struct grpc_channel *)unmanagedChannel {
if ((self = [super init])) {
_unmanagedChannel = unmanagedChannel;
}
@@ -89,12 +53,8 @@
}
- (void)dealloc {
- // _unmanagedChannel is NULL when deallocating an object of the base class (because the
- // initializer returns a different object).
- if (_unmanagedChannel) {
- // TODO(jcanizales): Be sure to add a test with a server that closes the connection prematurely,
- // as in the past that made this call to crash.
- grpc_channel_destroy(_unmanagedChannel);
- }
+ // TODO(jcanizales): Be sure to add a test with a server that closes the connection prematurely,
+ // as in the past that made this call to crash.
+ grpc_channel_destroy(_unmanagedChannel);
}
@end