mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-24 04:16:00 +08:00
Make RCTPackagerConnection a singleton
Reviewed By: fromcelticpark Differential Revision: D6361741 fbshipit-source-id: 96e92dff5dd3d7aa1f7555442b0eba90e7dbf47c
This commit is contained in:
committed by
Facebook Github Bot
parent
c91d87213e
commit
9180d4eb82
@@ -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
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user