Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 7d44959

Browse files
jimmy623facebook-github-bot
authored andcommittedAug 28, 2020
Respect port information if available from RCTBundleURLProvider
Summary: Changelog: Sometimes a port different than kRCTBundleURLProviderDefaultPort (8081) can be specified to RCTBundleURLProvider for packager checking or requesting resources through saving them in JSLocation, this adds support for that rather than always falling back to kRCTBundleURLProviderDefaultPort Reviewed By: PeteTheHeat Differential Revision: D23395548 fbshipit-source-id: b7a6f0816d1f226a2e3fb82bf2dc0ab9e79ef966
1 parent 54e19a6 commit 7d44959

4 files changed

+49
-22
lines changed
 

‎React/Base/RCTBundleURLProvider.h

+11-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,17 @@ extern const NSUInteger kRCTBundleURLProviderDefaultPort;
3737
*/
3838
- (NSString *)packagerServerHost;
3939

40-
+ (BOOL)isPackagerRunning:(NSString *)host;
40+
/**
41+
* Return the server host with optional port. If its a development build and there's no jsLocation defined,
42+
* it will return the server host IP address
43+
*/
44+
- (NSString *)packagerServerHostPort;
45+
46+
/**
47+
* Returns if there's a packager running at the given host port.
48+
* The port is optional, if not specified, kRCTBundleURLProviderDefaultPort will be used
49+
*/
50+
+ (BOOL)isPackagerRunning:(NSString *)hostPort;
4151

4252
/**
4353
* Returns the jsBundleURL for a given bundle entrypoint and

‎React/Base/RCTBundleURLProvider.mm

+17-11
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ - (void)resetToDefaults
7676
}
7777

7878
#if RCT_DEV_MENU
79-
+ (BOOL)isPackagerRunning:(NSString *)host
79+
+ (BOOL)isPackagerRunning:(NSString *)hostPort
8080
{
81-
NSURL *url = [serverRootWithHostPort(host) URLByAppendingPathComponent:@"status"];
81+
NSURL *url = [serverRootWithHostPort(hostPort) URLByAppendingPathComponent:@"status"];
8282

8383
NSURLSession *session = [NSURLSession sharedSession];
8484
NSURLRequest *request = [NSURLRequest requestWithURL:url];
@@ -116,21 +116,27 @@ - (NSString *)guessPackagerHost
116116
return nil;
117117
}
118118
#else
119-
+ (BOOL)isPackagerRunning:(NSString *)host
119+
+ (BOOL)isPackagerRunning:(NSString *)hostPort
120120
{
121121
return false;
122122
}
123123
#endif
124124

125125
- (NSString *)packagerServerHost
126126
{
127-
NSString *location = [self jsLocation];
127+
NSString *location = [self packagerServerHostPort];
128128
if (location) {
129129
NSInteger index = [location rangeOfString:@":"].location;
130130
if (index != NSNotFound) {
131131
location = [location substringToIndex:index];
132132
}
133133
}
134+
return location;
135+
}
136+
137+
- (NSString *)packagerServerHostPort
138+
{
139+
NSString *location = [self jsLocation];
134140
#if RCT_DEV_MENU
135141
if ([location length] && ![RCTBundleURLProvider isPackagerRunning:location]) {
136142
location = nil;
@@ -150,12 +156,12 @@ - (NSString *)packagerServerHost
150156

151157
- (NSURL *)jsBundleURLForBundleRoot:(NSString *)bundleRoot fallbackURLProvider:(NSURL * (^)(void))fallbackURLProvider
152158
{
153-
NSString *packagerServerHost = [self packagerServerHost];
154-
if (!packagerServerHost) {
159+
NSString *packagerServerHostPort = [self packagerServerHostPort];
160+
if (!packagerServerHostPort) {
155161
return fallbackURLProvider();
156162
} else {
157163
return [RCTBundleURLProvider jsBundleURLForBundleRoot:bundleRoot
158-
packagerHost:packagerServerHost
164+
packagerHost:packagerServerHostPort
159165
enableDev:[self enableDev]
160166
enableMinification:[self enableMinification]];
161167
}
@@ -164,7 +170,7 @@ - (NSURL *)jsBundleURLForBundleRoot:(NSString *)bundleRoot fallbackURLProvider:(
164170
- (NSURL *)jsBundleURLForSplitBundleRoot:(NSString *)bundleRoot
165171
{
166172
return [RCTBundleURLProvider jsBundleURLForBundleRoot:bundleRoot
167-
packagerHost:[self packagerServerHost]
173+
packagerHost:[self packagerServerHostPort]
168174
enableDev:[self enableDev]
169175
enableMinification:[self enableMinification]
170176
modulesOnly:YES
@@ -198,14 +204,14 @@ - (NSURL *)resourceURLForResourceRoot:(NSString *)root
198204
resourceExtension:(NSString *)extension
199205
offlineBundle:(NSBundle *)offlineBundle
200206
{
201-
NSString *packagerServerHost = [self packagerServerHost];
202-
if (!packagerServerHost) {
207+
NSString *packagerServerHostPort = [self packagerServerHostPort];
208+
if (!packagerServerHostPort) {
203209
// Serve offline bundle (local file)
204210
NSBundle *bundle = offlineBundle ?: [NSBundle mainBundle];
205211
return [bundle URLForResource:name withExtension:extension];
206212
}
207213
NSString *path = [NSString stringWithFormat:@"/%@/%@.%@", root, name, extension];
208-
return [[self class] resourceURLForResourcePath:path packagerHost:packagerServerHost query:nil];
214+
return [[self class] resourceURLForResourcePath:path packagerHost:packagerServerHostPort query:nil];
209215
}
210216

211217
+ (NSURL *)jsBundleURLForBundleRoot:(NSString *)bundleRoot

‎React/DevSupport/RCTInspectorDevServerHelper.mm

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
if (portStr && [portStr length] > 0) {
2525
port = [NSNumber numberWithInt:[portStr intValue]];
2626
}
27-
27+
if ([bundleURL port]) {
28+
port = [bundleURL port];
29+
}
2830
NSString *host = [bundleURL host];
2931
if (!host) {
3032
host = @"localhost";

‎React/DevSupport/RCTPackagerConnection.mm

+18-9
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ @implementation RCTPackagerConnection {
4040
std::mutex _mutex; // protects all ivars
4141
RCTReconnectingWebSocket *_socket;
4242
BOOL _socketConnected;
43-
NSString *_serverHostForSocket;
43+
NSString *_serverHostPortForSocket;
4444
id _bundleURLChangeObserver;
4545
uint32_t _nextToken;
4646
std::vector<Registration<RCTNotificationHandler>> _notificationRegistrations;
@@ -62,8 +62,8 @@ - (instancetype)init
6262
{
6363
if (self = [super init]) {
6464
_nextToken = 1; // Prevent randomly erasing a handler if you pass a bogus 0 token
65-
_serverHostForSocket = [[RCTBundleURLProvider sharedSettings] packagerServerHost];
66-
_socket = socketForLocation(_serverHostForSocket);
65+
_serverHostPortForSocket = [[RCTBundleURLProvider sharedSettings] packagerServerHostPort];
66+
_socket = socketForLocation(_serverHostPortForSocket);
6767
_socket.delegate = self;
6868
[_socket start];
6969

@@ -79,12 +79,21 @@ - (instancetype)init
7979
return self;
8080
}
8181

82-
static RCTReconnectingWebSocket *socketForLocation(NSString *const serverHost)
82+
static RCTReconnectingWebSocket *socketForLocation(NSString *const serverHostPort)
8383
{
84+
NSString *serverHost;
85+
NSString *serverPort;
86+
NSArray *locationComponents = [serverHostPort componentsSeparatedByString:@":"];
87+
if ([locationComponents count] > 0) {
88+
serverHost = locationComponents[0];
89+
}
90+
if ([locationComponents count] > 1) {
91+
serverPort = locationComponents[1];
92+
}
8493
NSURLComponents *const components = [NSURLComponents new];
8594
components.host = serverHost ?: @"localhost";
8695
components.scheme = @"http";
87-
components.port = @(kRCTBundleURLProviderDefaultPort);
96+
components.port = serverPort ? @(serverPort.integerValue) : @(kRCTBundleURLProviderDefaultPort);
8897
components.path = @"/message";
8998
components.queryItems = @[ [NSURLQueryItem queryItemWithName:@"role" value:@"ios"] ];
9099
static dispatch_queue_t queue;
@@ -118,15 +127,15 @@ - (void)bundleURLSettingsChanged
118127
return; // already stopped
119128
}
120129

121-
NSString *const serverHost = [[RCTBundleURLProvider sharedSettings] packagerServerHost];
122-
if ([serverHost isEqual:_serverHostForSocket]) {
130+
NSString *const serverHostPort = [[RCTBundleURLProvider sharedSettings] packagerServerHostPort];
131+
if ([serverHostPort isEqual:_serverHostPortForSocket]) {
123132
return; // unchanged
124133
}
125134

126135
_socket.delegate = nil;
127136
[_socket stop];
128-
_serverHostForSocket = serverHost;
129-
_socket = socketForLocation(serverHost);
137+
_serverHostPortForSocket = serverHostPort;
138+
_socket = socketForLocation(serverHostPort);
130139
_socket.delegate = self;
131140
[_socket start];
132141
}

0 commit comments

Comments
 (0)
Please sign in to comment.