mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Propose to connect metro server programmatically (#31828)
Summary: nowadays, we could only specify metro server by either dev settings or building time ip.txt. this pr adds a new way to specify metro server programmatically which makes rn launcher or testing more feasible. ## Changelog [Internal] [iOS] [Added] - Propose to connect metro server programmatically Pull Request resolved: https://github.com/facebook/react-native/pull/31828 Test Plan: just exposing a public interface for RCTPackagerConnection without much code change. test to call this interface success locally. Reviewed By: sammy-SC Differential Revision: D30878774 Pulled By: yungsters fbshipit-source-id: 5f1d6a4835a983abde7e095d20153e4ba2146a61
This commit is contained in:
committed by
Facebook GitHub Bot
parent
398595e074
commit
e2b5b6504c
@@ -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
|
||||
|
||||
@@ -125,28 +125,32 @@ static RCTReconnectingWebSocket *socketForLocation(NSString *const serverHostPor
|
||||
_requestRegistrations.clear();
|
||||
}
|
||||
|
||||
- (void)bundleURLSettingsChanged
|
||||
- (void)reconnect:(NSString *)packagerServerHostPort
|
||||
{
|
||||
std::lock_guard<std::mutex> 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
|
||||
|
||||
Reference in New Issue
Block a user