Skip to content

Commit e768013

Browse files
javachefacebook-github-bot
authored andcommitted
Merge RCTPackagerClient into RCTPackagerConnection
Reviewed By: mmmulani Differential Revision: D4988204 fbshipit-source-id: 78e0df5268bfc11e4e0edf8e60494e55022cd9f2
1 parent 71e84e6 commit e768013

File tree

10 files changed

+149
-222
lines changed

10 files changed

+149
-222
lines changed

Libraries/WebSocket/RCTSRWebSocket.m

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -161,41 +161,13 @@ - (void)returnConsumer:(RCTSRIOConsumer *)consumer;
161161

162162
@interface RCTSRWebSocket () <NSStreamDelegate>
163163

164-
- (void)_writeData:(NSData *)data;
165-
- (void)_closeWithProtocolError:(NSString *)message;
166-
- (void)_failWithError:(NSError *)error;
167-
168-
- (void)_disconnect;
169-
170-
- (void)_readFrameNew;
171-
- (void)_readFrameContinue;
172-
173-
- (void)_pumpScanner;
174-
175-
- (void)_pumpWriting;
176-
177-
- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback;
178-
- (void)_addConsumerWithDataLength:(size_t)dataLength callback:(data_callback)callback readToCurrentFrame:(BOOL)readToCurrentFrame unmaskBytes:(BOOL)unmaskBytes;
179-
- (void)_addConsumerWithScanner:(stream_scanner)consumer callback:(data_callback)callback dataLength:(size_t)dataLength;
180-
- (void)_readUntilBytes:(const void *)bytes length:(size_t)length callback:(data_callback)dataHandler;
181-
- (void)_readUntilHeaderCompleteWithCallback:(data_callback)dataHandler;
182-
183-
- (void)_sendFrameWithOpcode:(RCTSROpCode)opcode data:(id)data;
184-
185-
- (BOOL)_checkHandshake:(CFHTTPMessageRef)httpMessage;
186-
- (void)_RCTSR_commonInit;
187-
188-
- (void)_initializeStreams;
189-
- (void)_connect;
190-
191164
@property (nonatomic, assign) RCTSRReadyState readyState;
192165

193166
@property (nonatomic, strong) NSOperationQueue *delegateOperationQueue;
194167
@property (nonatomic, strong) dispatch_queue_t delegateDispatchQueue;
195168

196169
@end
197170

198-
199171
@implementation RCTSRWebSocket
200172
{
201173
NSInteger _webSocketVersion;
@@ -255,13 +227,6 @@ @implementation RCTSRWebSocket
255227
RCTSRIOConsumerPool *_consumerPool;
256228
}
257229

258-
static __strong NSData *CRLFCRLF;
259-
260-
+ (void)initialize;
261-
{
262-
CRLFCRLF = [[NSData alloc] initWithBytes:"\r\n\r\n" length:4];
263-
}
264-
265230
- (instancetype)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray<NSString *> *)protocols
266231
{
267232
RCTAssertParam(request);
@@ -434,7 +399,7 @@ - (void)_HTTPHeadersDidFinish;
434399
return;
435400
}
436401

437-
if(![self _checkHandshake:_receivedHTTPHeaders]) {
402+
if (![self _checkHandshake:_receivedHTTPHeaders]) {
438403
[self _failWithError:[NSError errorWithDomain:RCTSRWebSocketErrorDomain code:2133 userInfo:@{NSLocalizedDescriptionKey: [NSString stringWithFormat:@"Invalid Sec-WebSocket-Accept response"]}]];
439404
return;
440405
}

React/DevSupport/RCTPackagerClient.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,26 @@
88
*/
99

1010
#import <React/RCTDefines.h>
11-
#import <React/RCTPackagerClientResponder.h>
1211

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

14+
@class RCTPackagerClientResponder;
15+
@class RCTSRWebSocket;
16+
17+
extern const int RCT_PACKAGER_CLIENT_PROTOCOL_VERSION;
18+
1519
@protocol RCTPackagerClientMethod
1620

1721
- (void)handleRequest:(id)params withResponder:(RCTPackagerClientResponder *)responder;
1822
- (void)handleNotification:(id)params;
1923

2024
@end
2125

22-
@interface RCTPackagerClient : NSObject
26+
@interface RCTPackagerClientResponder : NSObject
2327

24-
- (instancetype)initWithURL:(NSURL *)url;
25-
- (void)addHandler:(id<RCTPackagerClientMethod>)handler forMethod:(NSString *)name;
26-
- (void)start;
27-
- (void)stop;
28+
- (instancetype)initWithId:(id)msgId socket:(RCTSRWebSocket *)socket;
29+
- (void)respondWithResult:(id)result;
30+
- (void)respondWithError:(id)error;
2831

2932
@end
3033

React/DevSupport/RCTPackagerClient.m

Lines changed: 31 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -9,93 +9,57 @@
99

1010
#import "RCTPackagerClient.h"
1111

12-
#import <React/RCTConvert.h>
13-
#import <React/RCTDefines.h>
1412
#import <React/RCTLog.h>
15-
#import <React/RCTReconnectingWebSocket.h>
1613
#import <React/RCTSRWebSocket.h>
1714
#import <React/RCTUtils.h>
1815

19-
#import "RCTPackagerClientResponder.h"
20-
2116
#if RCT_DEV // Only supported in dev mode
2217

23-
@interface RCTPackagerClient () <RCTWebSocketProtocolDelegate>
24-
@end
18+
const int RCT_PACKAGER_CLIENT_PROTOCOL_VERSION = 2;
2519

26-
@implementation RCTPackagerClient {
27-
RCTReconnectingWebSocket *_socket;
28-
NSMutableDictionary<NSString *, id<RCTPackagerClientMethod>> *_handlers;
20+
@implementation RCTPackagerClientResponder {
21+
id _msgId;
22+
__weak RCTSRWebSocket *_socket;
2923
}
3024

31-
- (instancetype)initWithURL:(NSURL *)url
25+
- (instancetype)initWithId:(id)msgId socket:(RCTSRWebSocket *)socket
3226
{
3327
if (self = [super init]) {
34-
_socket = [[RCTReconnectingWebSocket alloc] initWithURL:url];
35-
_socket.delegate = self;
36-
_handlers = [NSMutableDictionary new];
28+
_msgId = msgId;
29+
_socket = socket;
3730
}
3831
return self;
3932
}
4033

41-
- (void)addHandler:(id<RCTPackagerClientMethod>)handler forMethod:(NSString *)name
42-
{
43-
_handlers[name] = handler;
44-
}
45-
46-
- (void)start
47-
{
48-
_socket.delegate = self;
49-
[_socket start];
50-
}
51-
52-
- (void)stop
53-
{
54-
[_socket stop];
55-
}
56-
57-
- (BOOL)isSupportedVersion:(NSNumber *)version
34+
- (void)respondWithResult:(id)result
5835
{
59-
NSArray<NSNumber *> *const kSupportedVersions = @[ @(RCT_PACKAGER_CLIENT_PROTOCOL_VERSION) ];
60-
return [kSupportedVersions containsObject:version];
36+
NSDictionary<NSString *, id> *msg = @{
37+
@"version": @(RCT_PACKAGER_CLIENT_PROTOCOL_VERSION),
38+
@"id": _msgId,
39+
@"result": result,
40+
};
41+
NSError *jsError = nil;
42+
NSString *message = RCTJSONStringify(msg, &jsError);
43+
if (jsError) {
44+
RCTLogError(@"%@ failed to stringify message with error %@", [self class], jsError);
45+
} else {
46+
[_socket send:message];
47+
}
6148
}
6249

63-
- (void)webSocket:(RCTSRWebSocket *)webSocket didReceiveMessage:(id)message
50+
- (void)respondWithError:(id)error
6451
{
65-
if (!_handlers) {
66-
return;
67-
}
68-
69-
NSError *error = nil;
70-
NSDictionary<NSString *, id> *msg = RCTJSONParse(message, &error);
71-
72-
if (error) {
73-
RCTLogError(@"%@ failed to parse message with error %@\n<message>\n%@\n</message>", [self class], error, msg);
74-
return;
75-
}
76-
77-
if (![self isSupportedVersion:msg[@"version"]]) {
78-
RCTLogError(@"%@ received message with not supported version %@", [self class], msg[@"version"]);
79-
return;
80-
}
81-
82-
id<RCTPackagerClientMethod> methodHandler = _handlers[msg[@"method"]];
83-
if (!methodHandler) {
84-
if (msg[@"id"]) {
85-
NSString *errorMsg = [NSString stringWithFormat:@"%@ no handler found for method %@", [self class], msg[@"method"]];
86-
RCTLogError(errorMsg, msg[@"method"]);
87-
[[[RCTPackagerClientResponder alloc] initWithId:msg[@"id"]
88-
socket:webSocket] respondWithError:errorMsg];
89-
}
90-
return; // If it was a broadcast then we ignore it gracefully
91-
}
92-
93-
if (msg[@"id"]) {
94-
[methodHandler handleRequest:msg[@"params"]
95-
withResponder:[[RCTPackagerClientResponder alloc] initWithId:msg[@"id"]
96-
socket:webSocket]];
52+
NSDictionary<NSString *, id> *msg = @{
53+
@"version": @(RCT_PACKAGER_CLIENT_PROTOCOL_VERSION),
54+
@"id": _msgId,
55+
@"error": error,
56+
};
57+
NSError *jsError = nil;
58+
NSString *message = RCTJSONStringify(msg, &jsError);
59+
if (jsError) {
60+
RCTLogError(@"%@ failed to stringify message with error %@", [self class], jsError);
9761
} else {
98-
[methodHandler handleNotification:msg[@"params"]];
62+
[_socket send:message];
9963
}
10064
}
10165
@end

React/DevSupport/RCTPackagerClientResponder.h

Lines changed: 0 additions & 26 deletions
This file was deleted.

React/DevSupport/RCTPackagerClientResponder.m

Lines changed: 0 additions & 67 deletions
This file was deleted.

React/DevSupport/RCTPackagerConnection.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@
1414
#if RCT_DEV
1515

1616
@class RCTBridge;
17+
@protocol RCTPackagerClientMethod;
1718

1819
/**
1920
* Encapsulates connection to React Native packager
2021
*/
2122
@interface RCTPackagerConnection : NSObject
2223

2324
- (instancetype)initWithBridge:(RCTBridge *)bridge;
24-
- (void)connect;
25+
- (void)addHandler:(id<RCTPackagerClientMethod>)handler forMethod:(NSString *)name;
2526

2627
@end
2728

0 commit comments

Comments
 (0)