Split JSPackagerWebSocketClient into JSPackagerClient and ReconnectingWebSocket

Reviewed By: cwdick

Differential Revision: D4495054

fbshipit-source-id: 49c634dde789317270c711370dfbdc82f70f44cd
This commit is contained in:
Lukas Piatkowski
2017-02-14 09:37:28 -08:00
committed by Facebook Github Bot
parent 0ea47424ff
commit 47616d84d8
6 changed files with 324 additions and 223 deletions

View File

@@ -13,7 +13,9 @@ import javax.annotation.Nullable;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import android.content.Context;
@@ -28,7 +30,8 @@ import com.facebook.react.common.ReactConstants;
import com.facebook.react.common.network.OkHttpCallUtil;
import com.facebook.react.devsupport.interfaces.PackagerStatusCallback;
import com.facebook.react.modules.systeminfo.AndroidInfoHelpers;
import com.facebook.react.packagerconnection.JSPackagerWebSocketClient;
import com.facebook.react.packagerconnection.JSPackagerClient;
import com.facebook.react.packagerconnection.ReconnectingWebSocket;
import okhttp3.Call;
import okhttp3.Callback;
@@ -86,7 +89,7 @@ public class DevServerHelper {
public interface PackagerCommandListener {
void onPackagerReloadCommand();
void onCaptureHeapCommand();
void onPokeSamplingProfilerCommand(@Nullable final JSPackagerWebSocketClient.WebSocketSender webSocket);
void onPokeSamplingProfilerCommand(@Nullable final ReconnectingWebSocket.WebSocketSender webSocket);
}
private final DevInternalSettings mSettings;
@@ -94,7 +97,7 @@ public class DevServerHelper {
private final Handler mRestartOnChangePollingHandler;
private boolean mOnChangePollingEnabled;
private @Nullable JSPackagerWebSocketClient mPackagerConnection;
private @Nullable JSPackagerClient mPackagerClient;
private @Nullable InspectorPackagerConnection mInspectorPackagerConnection;
private @Nullable OkHttpClient mOnChangePollingClient;
private @Nullable OnServerContentChangeListener mOnServerContentChangeListener;
@@ -112,32 +115,40 @@ public class DevServerHelper {
}
public void openPackagerConnection(final PackagerCommandListener commandListener) {
if (mPackagerConnection != null) {
if (mPackagerClient != null) {
FLog.w(ReactConstants.TAG, "Packager connection already open, nooping.");
return;
}
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
mPackagerConnection = new JSPackagerWebSocketClient(getPackagerConnectionURL(),
new JSPackagerWebSocketClient.JSPackagerCallback() {
@Override
public void onMessage(
@Nullable JSPackagerWebSocketClient.WebSocketSender webSocket,
String target,
String action) {
if (commandListener != null && "bridge".equals(target)) {
if ("reload".equals(action)) {
commandListener.onPackagerReloadCommand();
} else if ("captureHeap".equals(action)) {
commandListener.onCaptureHeapCommand();
} else if ("pokeSamplingProfiler".equals(action)) {
commandListener.onPokeSamplingProfilerCommand(webSocket);
}
}
}
});
mPackagerConnection.connect();
Map<String, JSPackagerClient.RequestHandler> handlers =
new HashMap<String, JSPackagerClient.RequestHandler>();
handlers.put("reload", new JSPackagerClient.RequestHandler() {
@Override
public void onNotification(
@Nullable ReconnectingWebSocket.WebSocketSender webSocket) {
commandListener.onPackagerReloadCommand();
}
});
handlers.put("captureHeap", new JSPackagerClient.RequestHandler() {
@Override
public void onNotification(
@Nullable ReconnectingWebSocket.WebSocketSender webSocket) {
commandListener.onCaptureHeapCommand();
}
});
handlers.put("pokeSamplingProfiler", new JSPackagerClient.RequestHandler() {
@Override
public void onNotification(
@Nullable ReconnectingWebSocket.WebSocketSender webSocket) {
commandListener.onPokeSamplingProfilerCommand(webSocket);
}
});
mPackagerClient = new JSPackagerClient(getPackagerConnectionURL(), handlers);
mPackagerClient.init();
return null;
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
@@ -147,9 +158,9 @@ public class DevServerHelper {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
if (mPackagerConnection != null) {
mPackagerConnection.closeQuietly();
mPackagerConnection = null;
if (mPackagerClient != null) {
mPackagerClient.close();
mPackagerClient = null;
}
return null;
}

View File

@@ -56,7 +56,7 @@ import com.facebook.react.devsupport.interfaces.DevSupportManager;
import com.facebook.react.devsupport.interfaces.PackagerStatusCallback;
import com.facebook.react.devsupport.interfaces.StackFrame;
import com.facebook.react.modules.debug.interfaces.DeveloperSettings;
import com.facebook.react.packagerconnection.JSPackagerWebSocketClient;
import com.facebook.react.packagerconnection.ReconnectingWebSocket;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
@@ -694,7 +694,7 @@ public class DevSupportManagerImpl implements
@Override
public void onPokeSamplingProfilerCommand(
@Nullable final JSPackagerWebSocketClient.WebSocketSender webSocket) {
@Nullable final ReconnectingWebSocket.WebSocketSender webSocket) {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
@@ -710,7 +710,7 @@ public class DevSupportManagerImpl implements
}
private void handlePokeSamplingProfiler(
@Nullable JSPackagerWebSocketClient.WebSocketSender webSocket) {
@Nullable ReconnectingWebSocket.WebSocketSender webSocket) {
try {
List<String> pokeResults = JSCSamplingProfiler.poke(60000);
for (String result : pokeResults) {