mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-02 06:45:02 +08:00
Persistent websocket connection from Android to Packager
Reviewed By: astreet Differential Revision: D3447685 fbshipit-source-id: 0e4e3fb02b84b9b15c2c798c0e4c89ff6fd1665c
This commit is contained in:
committed by
Facebook Github Bot 0
parent
b3886652ab
commit
adcb9491bd
@@ -9,6 +9,7 @@ android_library(
|
||||
react_native_dep('third-party/java/infer-annotations:infer-annotations'),
|
||||
react_native_dep('third-party/java/jsr-305:jsr-305'),
|
||||
react_native_dep('third-party/java/okhttp:okhttp3'),
|
||||
react_native_dep('third-party/java/okhttp:okhttp3-ws'),
|
||||
react_native_dep('third-party/java/okio:okio'),
|
||||
react_native_target('java/com/facebook/react/bridge:bridge'),
|
||||
react_native_target('java/com/facebook/react/common:common'),
|
||||
|
||||
@@ -15,6 +15,7 @@ import android.text.TextUtils;
|
||||
|
||||
import com.facebook.common.logging.FLog;
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
import com.facebook.react.bridge.JSPackagerWebSocketClient;
|
||||
import com.facebook.react.bridge.UiThreadUtil;
|
||||
import com.facebook.react.common.ReactConstants;
|
||||
import com.facebook.react.common.network.OkHttpCallUtil;
|
||||
@@ -59,6 +60,7 @@ public class DevServerHelper {
|
||||
private static final String ONCHANGE_ENDPOINT_URL_FORMAT =
|
||||
"http://%s/onchange";
|
||||
private static final String WEBSOCKET_PROXY_URL_FORMAT = "ws://%s/debugger-proxy?role=client";
|
||||
private static final String PACKAGER_CONNECTION_URL_FORMAT = "ws://%s/message?role=shell";
|
||||
private static final String PACKAGER_STATUS_URL_FORMAT = "http://%s/status";
|
||||
|
||||
private static final String PACKAGER_OK_STATUS = "packager-status:running";
|
||||
@@ -76,12 +78,17 @@ public class DevServerHelper {
|
||||
void onServerContentChanged();
|
||||
}
|
||||
|
||||
public interface PackagerCommandListener {
|
||||
void onReload();
|
||||
}
|
||||
|
||||
public interface PackagerStatusCallback {
|
||||
void onPackagerStatusFetched(boolean packagerIsRunning);
|
||||
}
|
||||
|
||||
private final DevInternalSettings mSettings;
|
||||
private final OkHttpClient mClient;
|
||||
private final JSPackagerWebSocketClient mPackagerConnection;
|
||||
private final Handler mRestartOnChangePollingHandler;
|
||||
|
||||
private boolean mOnChangePollingEnabled;
|
||||
@@ -89,7 +96,7 @@ public class DevServerHelper {
|
||||
private @Nullable OnServerContentChangeListener mOnServerContentChangeListener;
|
||||
private @Nullable Call mDownloadBundleFromURLCall;
|
||||
|
||||
public DevServerHelper(DevInternalSettings settings) {
|
||||
public DevServerHelper(DevInternalSettings settings, final PackagerCommandListener commandListener) {
|
||||
mSettings = settings;
|
||||
mClient = new OkHttpClient.Builder()
|
||||
.connectTimeout(HTTP_CONNECT_TIMEOUT_MS, TimeUnit.MILLISECONDS)
|
||||
@@ -98,6 +105,16 @@ public class DevServerHelper {
|
||||
.build();
|
||||
|
||||
mRestartOnChangePollingHandler = new Handler();
|
||||
mPackagerConnection = new JSPackagerWebSocketClient(getPackagerConnectionURL(),
|
||||
new JSPackagerWebSocketClient.JSPackagerCallback() {
|
||||
@Override
|
||||
public void onMessage(String target, String action) {
|
||||
if (commandListener != null && "bridge".equals(target) && "reload".equals(action)) {
|
||||
commandListener.onReload();
|
||||
}
|
||||
}
|
||||
});
|
||||
mPackagerConnection.connect();
|
||||
}
|
||||
|
||||
/** Intent action for reloading the JS */
|
||||
@@ -109,6 +126,10 @@ public class DevServerHelper {
|
||||
return String.format(Locale.US, WEBSOCKET_PROXY_URL_FORMAT, getDebugServerHost());
|
||||
}
|
||||
|
||||
private String getPackagerConnectionURL() {
|
||||
return String.format(Locale.US, PACKAGER_CONNECTION_URL_FORMAT, getDebugServerHost());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the host to use when connecting to the bundle server from the host itself.
|
||||
*/
|
||||
|
||||
@@ -135,7 +135,19 @@ public class DevSupportManagerImpl implements DevSupportManager {
|
||||
mApplicationContext = applicationContext;
|
||||
mJSAppBundleName = packagerPathForJSBundleName;
|
||||
mDevSettings = new DevInternalSettings(applicationContext, this);
|
||||
mDevServerHelper = new DevServerHelper(mDevSettings);
|
||||
mDevServerHelper = new DevServerHelper(
|
||||
mDevSettings,
|
||||
new DevServerHelper.PackagerCommandListener() {
|
||||
@Override
|
||||
public void onReload() {
|
||||
UiThreadUtil.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
handleReloadJS();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Prepare shake gesture detector (will be started/stopped from #reload)
|
||||
mShakeDetector = new ShakeDetector(new ShakeDetector.ShakeListener() {
|
||||
|
||||
Reference in New Issue
Block a user