Make RCTPackagerConnection a singleton

Reviewed By: fromcelticpark

Differential Revision: D6361741

fbshipit-source-id: 96e92dff5dd3d7aa1f7555442b0eba90e7dbf47c
This commit is contained in:
Adam Ernst
2017-11-20 18:12:13 -08:00
committed by Facebook Github Bot
parent c91d87213e
commit 9180d4eb82
24 changed files with 449 additions and 715 deletions

View File

@@ -11,28 +11,29 @@
#if RCT_DEV // Only supported in dev mode
@class RCTSRWebSocket;
@protocol RCTWebSocketProtocolDelegate
- (void)webSocketDidOpen:(RCTSRWebSocket *)webSocket;
- (void)webSocket:(RCTSRWebSocket *)webSocket didReceiveMessage:(id)message;
- (void)webSocket:(RCTSRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
@class RCTReconnectingWebSocket;
@protocol RCTReconnectingWebSocketDelegate
- (void)reconnectingWebSocketDidOpen:(RCTReconnectingWebSocket *)webSocket;
- (void)reconnectingWebSocket:(RCTReconnectingWebSocket *)webSocket didReceiveMessage:(id)message;
/** Sent when the socket has closed due to error or clean shutdown. An automatic reconnect will start shortly. */
- (void)reconnectingWebSocketDidClose:(RCTReconnectingWebSocket *)webSocket;
@end
@interface RCTReconnectingWebSocket : NSObject
- (instancetype)initWithURL:(NSURL *)url;
@property (nonatomic, weak) id<RCTWebSocketProtocolDelegate> delegate;
/** @brief Must be set before -start to have effect */
@property (nonatomic, strong) dispatch_queue_t delegateDispatchQueue;
/** Delegate will be messaged on the given queue (required). */
- (instancetype)initWithURL:(NSURL *)url queue:(dispatch_queue_t)queue;
@property (nonatomic, weak) id<RCTReconnectingWebSocketDelegate> delegate;
- (void)send:(id)data;
- (void)start;
- (void)stop;
- (instancetype)initWithURL:(NSURL *)url __deprecated_msg("Use initWithURL:queue: instead");
/** @brief Must be set before -start to have effect */
@property (nonatomic, strong) dispatch_queue_t delegateDispatchQueue __deprecated_msg("Use initWithURL:queue: instead");
@end
#endif

View File

@@ -58,8 +58,6 @@ static void my_os_log_error_impl(void *dso, os_log_t log, os_log_type_t type, co
RCTSRWebSocket *_socket;
}
@synthesize delegate = _delegate;
+ (void)load
{
static dispatch_once_t onceToken;
@@ -75,14 +73,20 @@ static void my_os_log_error_impl(void *dso, os_log_t log, os_log_type_t type, co
});
}
- (instancetype)initWithURL:(NSURL *)url
- (instancetype)initWithURL:(NSURL *)url queue:(dispatch_queue_t)queue
{
if (self = [super init]) {
_url = url;
_delegateDispatchQueue = queue;
}
return self;
}
- (instancetype)initWithURL:(NSURL *)url
{
return [self initWithURL:url queue:dispatch_get_main_queue()];
}
- (void)send:(id)data
{
[_socket send:data];
@@ -93,9 +97,7 @@ static void my_os_log_error_impl(void *dso, os_log_t log, os_log_type_t type, co
[self stop];
_socket = [[RCTSRWebSocket alloc] initWithURL:_url];
_socket.delegate = self;
if (_delegateDispatchQueue) {
[_socket setDelegateDispatchQueue:_delegateDispatchQueue];
}
[_socket setDelegateDispatchQueue:_delegateDispatchQueue];
[_socket open];
}
@@ -108,9 +110,7 @@ static void my_os_log_error_impl(void *dso, os_log_t log, os_log_type_t type, co
- (void)webSocket:(RCTSRWebSocket *)webSocket didReceiveMessage:(id)message
{
if (_delegate) {
[_delegate webSocket:webSocket didReceiveMessage:message];
}
[_delegate reconnectingWebSocket:self didReceiveMessage:message];
}
- (void)reconnect
@@ -126,17 +126,18 @@ static void my_os_log_error_impl(void *dso, os_log_t log, os_log_type_t type, co
- (void)webSocketDidOpen:(RCTSRWebSocket *)webSocket
{
[self.delegate webSocketDidOpen:webSocket];
[_delegate reconnectingWebSocketDidOpen:self];
}
- (void)webSocket:(RCTSRWebSocket *)webSocket didFailWithError:(NSError *)error
{
[_delegate reconnectingWebSocketDidClose:self];
[self reconnect];
}
- (void)webSocket:(RCTSRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean
{
[self.delegate webSocket:webSocket didCloseWithCode:code reason:reason wasClean:wasClean];
[_delegate reconnectingWebSocketDidClose:self];
[self reconnect];
}