diff --git a/React/DevSupport/RCTPackagerConnection.h b/React/DevSupport/RCTPackagerConnection.h index 7f1bbd1d0ea..795a3fcad5b 100644 --- a/React/DevSupport/RCTPackagerConnection.h +++ b/React/DevSupport/RCTPackagerConnection.h @@ -59,6 +59,9 @@ typedef void (^RCTConnectedHandler)(void); /** Disconnects and removes all handlers. */ - (void)stop; +/** Reconnect with given packager server. */ +- (void)reconnect:(NSString *)packagerServerHostPort; + /** * Historically no distinction was made between notification and request * handlers. If you use this method, it will be registered as *both* a diff --git a/React/DevSupport/RCTPackagerConnection.mm b/React/DevSupport/RCTPackagerConnection.mm index bffd8b5a641..4434d67ca62 100644 --- a/React/DevSupport/RCTPackagerConnection.mm +++ b/React/DevSupport/RCTPackagerConnection.mm @@ -125,28 +125,32 @@ static RCTReconnectingWebSocket *socketForLocation(NSString *const serverHostPor _requestRegistrations.clear(); } -- (void)bundleURLSettingsChanged +- (void)reconnect:(NSString *)packagerServerHostPort { std::lock_guard l(_mutex); if (_socket == nil) { return; // already stopped } - NSString *const serverHostPort = [[RCTBundleURLProvider sharedSettings] packagerServerHostPort]; NSString *const serverScheme = [[RCTBundleURLProvider sharedSettings] packagerScheme]; - if ([serverHostPort isEqual:_serverHostPortForSocket] && [serverScheme isEqual:_serverSchemeForSocket]) { + if ([packagerServerHostPort isEqual:_serverHostPortForSocket] && [serverScheme isEqual:_serverSchemeForSocket]) { return; // unchanged } _socket.delegate = nil; [_socket stop]; - _serverHostPortForSocket = serverHostPort; + _serverHostPortForSocket = packagerServerHostPort; _serverSchemeForSocket = serverScheme; - _socket = socketForLocation(serverHostPort, serverScheme); + _socket = socketForLocation(packagerServerHostPort, serverScheme); _socket.delegate = self; [_socket start]; } +- (void)bundleURLSettingsChanged +{ + [self reconnect:[[RCTBundleURLProvider sharedSettings] packagerServerHostPort]]; +} + - (RCTHandlerToken)addNotificationHandler:(RCTNotificationHandler)handler queue:(dispatch_queue_t)queue forMethod:(NSString *)method