Skip to content

Commit db8efd9

Browse files
javachefacebook-github-bot
authored andcommitted
Split off websocket related items to RCTPackagerConnection
Reviewed By: cwdick Differential Revision: D4588557 fbshipit-source-id: 3f4176b9bab2b06cacbb06f1ff514a5f99a76d73
1 parent 2403b42 commit db8efd9

File tree

13 files changed

+287
-100
lines changed

13 files changed

+287
-100
lines changed

React.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ Pod::Spec.new do |s|
4343
ss.dependency "Yoga", "#{package["version"]}.React"
4444
ss.dependency "React/cxxreact"
4545
ss.source_files = "React/**/*.{c,h,m,mm,S}"
46-
ss.exclude_files = "**/__tests__/*", "IntegrationTests/*", "React/DevSupport/*", "React/Modules/RCTDev{LoadingView,Menu}.*", "React/**/RCTTVView.*", "ReactCommon/yoga/*", "React/Cxx*/*"
46+
ss.exclude_files = "**/__tests__/*", "IntegrationTests/*", "React/DevSupport/*", "React/**/RCTTVView.*", "ReactCommon/yoga/*", "React/Cxx*/*"
4747
ss.framework = "JavaScriptCore"
4848
ss.libraries = "stdc++"
4949
end
5050

5151
s.subspec "DevSupport" do |ss|
5252
ss.dependency "React/Core"
5353
ss.dependency "React/RCTWebSocket"
54-
ss.source_files = "React/DevSupport/*", "React/Modules/RCTDev{LoadingView,Menu}.*"
54+
ss.source_files = "React/DevSupport/*"
5555
end
5656

5757
s.subspec "tvOS" do |ss|
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
#import <React/RCTBridgeModule.h>
1111

12+
@class RCTLoadingProgress;
13+
1214
@interface RCTDevLoadingView : NSObject <RCTBridgeModule>
1315

1416
+ (void)setEnabled:(BOOL)enabled;
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
* of patent rights can be found in the PATENTS file in the same directory.
88
*/
99

10+
#import "RCTDevLoadingView.h"
11+
1012
#import <QuartzCore/QuartzCore.h>
1113

1214
#import "RCTBridge.h"
13-
#import "RCTDevLoadingView.h"
1415
#import "RCTDefines.h"
15-
#import "RCTUtils.h"
1616
#import "RCTModalHostViewController.h"
17+
#import "RCTUtils.h"
1718

1819
#if RCT_DEV
1920

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*/
9+
10+
#import <Foundation/Foundation.h>
11+
12+
#import <React/RCTDefines.h>
13+
14+
#if RCT_DEV
15+
16+
@class RCTBridge;
17+
18+
/**
19+
* Encapsulates connection to React Native packager
20+
*/
21+
@interface RCTPackagerConnection : NSObject
22+
23+
- (instancetype)initWithBridge:(RCTBridge *)bridge;
24+
- (void)connect;
25+
26+
@end
27+
28+
#endif
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*/
9+
10+
#import "RCTPackagerConnection.h"
11+
12+
#import <objc/runtime.h>
13+
14+
#import <React/RCTAssert.h>
15+
#import <React/RCTBridge.h>
16+
#import <React/RCTWebSocketObserverProtocol.h>
17+
18+
#import "RCTPackagerClient.h"
19+
#import "RCTReloadPackagerMethod.h"
20+
#import "RCTSamplingProfilerPackagerMethod.h"
21+
22+
#if RCT_DEV
23+
24+
@implementation RCTPackagerConnection {
25+
RCTBridge *_bridge;
26+
}
27+
28+
- (instancetype)initWithBridge:(RCTBridge *)bridge
29+
{
30+
if (self = [super init]) {
31+
_bridge = bridge;
32+
}
33+
return self;
34+
}
35+
36+
- (void)connect
37+
{
38+
RCTAssertMainQueue();
39+
40+
NSURL *url = [self packagerURL];
41+
if (!url) {
42+
return;
43+
}
44+
45+
// The jsPackagerClient is a static map that holds different packager clients per the packagerURL
46+
// In case many instances of DevMenu are created, the latest instance that use the same URL as
47+
// previous instances will override given packager client's method handlers
48+
static NSMutableDictionary<NSString *, RCTPackagerClient *> *jsPackagerClients = nil;
49+
if (jsPackagerClients == nil) {
50+
jsPackagerClients = [NSMutableDictionary new];
51+
}
52+
53+
NSString *key = [url absoluteString];
54+
RCTPackagerClient *packagerClient = jsPackagerClients[key];
55+
if (!packagerClient) {
56+
packagerClient = [[RCTPackagerClient alloc] initWithURL:url];
57+
jsPackagerClients[key] = packagerClient;
58+
} else {
59+
[packagerClient stop];
60+
}
61+
62+
[packagerClient addHandler:[[RCTReloadPackagerMethod alloc] initWithBridge:_bridge]
63+
forMethod:@"reload"];
64+
[packagerClient addHandler:[[RCTSamplingProfilerPackagerMethod alloc] initWithBridge:_bridge]
65+
forMethod:@"pokeSamplingProfiler"];
66+
[packagerClient start];
67+
}
68+
69+
- (NSURL *)packagerURL
70+
{
71+
NSString *host = [_bridge.bundleURL host];
72+
NSString *scheme = [_bridge.bundleURL scheme];
73+
if (!host) {
74+
host = @"localhost";
75+
scheme = @"http";
76+
}
77+
78+
NSNumber *port = [_bridge.bundleURL port];
79+
if (!port) {
80+
port = @8081; // Packager default port
81+
}
82+
return [NSURL URLWithString:[NSString stringWithFormat:@"%@://%@:%@/message?role=ios-rn-rctdevmenu", scheme, host, port]];
83+
}
84+
85+
@end
86+
87+
#endif

React/DevSupport/RCTReloadPackagerMethod.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
* of patent rights can be found in the PATENTS file in the same directory.
88
*/
99

10-
#import <React/RCTBridge.h>
1110
#import <React/RCTPackagerClient.h>
1211

1312
#if RCT_DEV // Only supported in dev mode
1413

15-
@interface RCTReloadPackagerMethod : NSObject<RCTPackagerClientMethod>
14+
@class RCTBridge;
15+
16+
@interface RCTReloadPackagerMethod : NSObject <RCTPackagerClientMethod>
1617

1718
- (instancetype)initWithBridge:(RCTBridge *)bridge;
1819

React/DevSupport/RCTReloadPackagerMethod.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
#import <objc/runtime.h>
1313

14+
#import "RCTBridge.h"
15+
1416
#if RCT_DEV // Only supported in dev mode
1517

1618
@implementation RCTReloadPackagerMethod {

React/DevSupport/RCTSamplingProfilerPackagerMethod.mm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#import <React/RCTBridge+JavaScriptCore.h>
1515
#import <jschelpers/JavaScriptCore.h>
1616

17+
#import "RCTBridge.h"
1718
#import "RCTLog.h"
1819

1920
#if RCT_DEV // Only supported in dev mode

0 commit comments

Comments
 (0)