From f1d5fdd46842daaebb90b25ebc2b0c3ed13d9fd2 Mon Sep 17 00:00:00 2001 From: Emil Sjolander Date: Mon, 24 Apr 2017 03:53:46 -0700 Subject: [PATCH] connect / disconnect with websocket not when starting / stopping Reviewed By: kittens Differential Revision: D4937181 fbshipit-source-id: d1ec8144567809537fc7e321c255501bb130939b --- .../packagerconnection/JSPackagerClient.java | 2 +- .../ReconnectingWebSocket.java | 36 +++++++++++++++---- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/JSPackagerClient.java b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/JSPackagerClient.java index 6160152b0..e22a37ef7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/JSPackagerClient.java +++ b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/JSPackagerClient.java @@ -76,7 +76,7 @@ final public class JSPackagerClient implements ReconnectingWebSocket.MessageCall .appendQueryParameter("clientid", clientId); String url = builder.build().toString(); - mWebSocket = new ReconnectingWebSocket(url, this); + mWebSocket = new ReconnectingWebSocket(url, this, null); mRequestHandlers = requestHandlers; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java index f774c1d10..776c6ebfa 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java +++ b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java @@ -41,17 +41,27 @@ final public class ReconnectingWebSocket implements WebSocketListener { void onMessage(ResponseBody message); } + public interface ConnectionCallback { + void onConnected(); + void onDisconnected(); + } + private final String mUrl; private final Handler mHandler; private boolean mClosed = false; private boolean mSuppressConnectionErrors; private @Nullable WebSocket mWebSocket; - private @Nullable MessageCallback mCallback; + private @Nullable MessageCallback mMessageCallback; + private @Nullable ConnectionCallback mConnectionCallback; - public ReconnectingWebSocket(String url, MessageCallback callback) { + public ReconnectingWebSocket( + String url, + MessageCallback messageCallback, + ConnectionCallback connectionCallback) { super(); mUrl = url; - mCallback = callback; + mMessageCallback = messageCallback; + mConnectionCallback = connectionCallback; mHandler = new Handler(Looper.getMainLooper()); } @@ -101,7 +111,11 @@ final public class ReconnectingWebSocket implements WebSocketListener { public void closeQuietly() { mClosed = true; closeWebSocketQuietly(); - mCallback = null; + mMessageCallback = null; + + if (mConnectionCallback != null) { + mConnectionCallback.onConnected(); + } } private void closeWebSocketQuietly() { @@ -124,6 +138,10 @@ final public class ReconnectingWebSocket implements WebSocketListener { public synchronized void onOpen(WebSocket webSocket, Response response) { mWebSocket = webSocket; mSuppressConnectionErrors = false; + + if (mConnectionCallback != null) { + mConnectionCallback.onConnected(); + } } @Override @@ -132,14 +150,17 @@ final public class ReconnectingWebSocket implements WebSocketListener { abort("Websocket exception", e); } if (!mClosed) { + if (mConnectionCallback != null) { + mConnectionCallback.onDisconnected(); + } reconnect(); } } @Override public synchronized void onMessage(ResponseBody message) { - if (mCallback != null) { - mCallback.onMessage(message); + if (mMessageCallback != null) { + mMessageCallback.onMessage(message); } } @@ -150,6 +171,9 @@ final public class ReconnectingWebSocket implements WebSocketListener { public synchronized void onClose(int code, String reason) { mWebSocket = null; if (!mClosed) { + if (mConnectionCallback != null) { + mConnectionCallback.onDisconnected(); + } reconnect(); } }