From b043bd65661f51a83fff9112727716abab9ca776 Mon Sep 17 00:00:00 2001 From: Roger Hu Date: Fri, 24 Mar 2017 16:38:32 -0700 Subject: [PATCH 1/4] Rename interface to OkHttp3SocketClientFactory.java. Modify ParseLiveQueryClient to accept OkHttpClient instances. --- .../com/parse/OkHttp3SocketClientFactory.java | 127 ++++++++++++++++++ .../com/parse/OkHttp3WebSocketClient.java | 110 --------------- .../java/com/parse/ParseLiveQueryClient.java | 7 +- .../com/parse/ParseLiveQueryClientImpl.java | 7 +- 4 files changed, 139 insertions(+), 112 deletions(-) create mode 100644 ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java delete mode 100644 ParseLiveQuery/src/main/java/com/parse/OkHttp3WebSocketClient.java diff --git a/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java b/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java new file mode 100644 index 0000000..0fe1587 --- /dev/null +++ b/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java @@ -0,0 +1,127 @@ +package com.parse; + +import android.util.Log; + +import java.net.URI; +import java.util.Locale; + +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.WebSocket; +import okhttp3.WebSocketListener; +import okio.ByteString; + +/* package */ + +/* package */ public class OkHttp3SocketClientFactory implements WebSocketClientFactory { + + OkHttpClient mClient; + + public OkHttp3SocketClientFactory(OkHttpClient client) { + mClient = client; + } + + public OkHttp3SocketClientFactory() { + mClient = new OkHttpClient(); + } + + @Override + public WebSocketClient createInstance(WebSocketClient.WebSocketClientCallback webSocketClientCallback, URI hostUrl) { + return new OkHttp3WebSocketClient(mClient, webSocketClientCallback, hostUrl); + } + + public WebSocketClient createInstance(OkHttpClient client, WebSocketClient.WebSocketClientCallback webSocketClientCallback, URI hostUrl) { + return new OkHttp3WebSocketClient(mClient, webSocketClientCallback, hostUrl); + } + + class OkHttp3WebSocketClient implements WebSocketClient { + + private static final String LOG_TAG = "OkHttpWebSocketClient"; + + private final WebSocketClientCallback webSocketClientCallback; + private WebSocket webSocket; + private State state = State.NONE; + private final OkHttpClient client; + private final String url; + private final int STATUS_CODE = 200; + private final String CLOSING_MSG = "User invoked close"; + + private final WebSocketListener handler = new WebSocketListener() { + @Override + public void onOpen(WebSocket webSocket, Response response) { + setState(State.CONNECTED); + webSocketClientCallback.onOpen(); + } + + @Override + public void onMessage(WebSocket webSocket, String text) { + webSocketClientCallback.onMessage(text); + } + + @Override + public void onMessage(WebSocket webSocket, ByteString bytes) { + Log.w(LOG_TAG, String.format(Locale.US, + "Socket got into inconsistent state and received %s instead.", + bytes.toString())); + } + + @Override + public void onClosed(WebSocket webSocket, int code, String reason) { + setState(State.DISCONNECTED); + webSocketClientCallback.onClose(); + } + + @Override + public void onFailure(okhttp3.WebSocket webSocket, Throwable t, Response response) { + webSocketClientCallback.onError(t); + } + }; + + private OkHttp3WebSocketClient(OkHttpClient okHttpClient, + WebSocketClientCallback webSocketClientCallback, URI hostUrl) { + client = okHttpClient; + this.webSocketClientCallback = webSocketClientCallback; + url = hostUrl.toString(); + } + + @Override + public synchronized void open() { + if (State.NONE == state) { + // OkHttp3 connects as soon as the socket is created so do it here. + Request request = new Request.Builder() + .url(url) + .build(); + + webSocket = client.newWebSocket(request, handler); + setState(State.CONNECTING); + } + } + + @Override + public synchronized void close() { + setState(State.DISCONNECTING); + webSocket.close(STATUS_CODE, CLOSING_MSG); + } + + @Override + public void send(String message) { + if (state == State.CONNECTED) { + webSocket.send(message); + } + } + + @Override + public State getState() { + return state; + } + + private synchronized void setState(State newState) { + this.state = newState; + this.webSocketClientCallback.stateChanged(); + } + + + } + +} \ No newline at end of file diff --git a/ParseLiveQuery/src/main/java/com/parse/OkHttp3WebSocketClient.java b/ParseLiveQuery/src/main/java/com/parse/OkHttp3WebSocketClient.java deleted file mode 100644 index 545a8de..0000000 --- a/ParseLiveQuery/src/main/java/com/parse/OkHttp3WebSocketClient.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.parse; - -import android.util.Log; - -import java.net.URI; -import java.util.Locale; - -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.WebSocket; -import okhttp3.WebSocketListener; -import okio.ByteString; - -/* package */ class OkHttp3WebSocketClient implements WebSocketClient { - - private static final String LOG_TAG = "OkHttpWebSocketClient"; - - private final WebSocketClientCallback webSocketClientCallback; - private WebSocket webSocket; - private State state = State.NONE; - private final OkHttpClient client; - private final String url; - private final int STATUS_CODE = 200; - private final String CLOSING_MSG = "User invoked close"; - - private final WebSocketListener handler = new WebSocketListener() { - @Override - public void onOpen(WebSocket webSocket, Response response) { - setState(State.CONNECTED); - webSocketClientCallback.onOpen(); - } - - @Override - public void onMessage(WebSocket webSocket, String text) { - webSocketClientCallback.onMessage(text); - } - - @Override - public void onMessage(WebSocket webSocket, ByteString bytes) { - Log.w(LOG_TAG, String.format(Locale.US, "Socket got into inconsistent state and received %s instead.", bytes.toString())); - } - - @Override - public void onClosed(WebSocket webSocket, int code, String reason) { - setState(State.DISCONNECTED); - webSocketClientCallback.onClose(); - } - - @Override - public void onFailure(okhttp3.WebSocket webSocket, Throwable t, Response response) { - webSocketClientCallback.onError(t); - } - }; - - private OkHttp3WebSocketClient(OkHttpClient okHttpClient, WebSocketClientCallback webSocketClientCallback, URI hostUrl) { - client = okHttpClient; - this.webSocketClientCallback = webSocketClientCallback; - url = hostUrl.toString(); - } - - @Override - public synchronized void open() { - if (State.NONE == state) { - // OkHttp3 connects as soon as the socket is created so do it here. - Request request = new Request.Builder() - .url(url) - .build(); - - webSocket = client.newWebSocket(request, handler); - setState(State.CONNECTING); - } - } - - @Override - public synchronized void close() { - setState(State.DISCONNECTING); - webSocket.close(STATUS_CODE, CLOSING_MSG); - } - - @Override - public void send(String message) { - if (state == State.CONNECTED) { - webSocket.send(message); - } - } - - @Override - public State getState() { - return state; - } - - private synchronized void setState(State newState) { - this.state = newState; - this.webSocketClientCallback.stateChanged(); - } - - /* package */ static class OkHttp3SocketClientFactory implements WebSocketClientFactory { - @Override - public WebSocketClient createInstance(WebSocketClientCallback webSocketClientCallback, URI hostUrl) { - return new OkHttp3WebSocketClient(new OkHttpClient(), webSocketClientCallback, hostUrl); - } - - public WebSocketClient createInstance(OkHttpClient client, WebSocketClientCallback webSocketClientCallback, URI hostUrl) { - return new OkHttp3WebSocketClient(client, webSocketClientCallback, hostUrl); - } - - } - -} diff --git a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java index 3b30238..201d523 100644 --- a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java +++ b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java @@ -3,8 +3,9 @@ import java.net.URI; import java.util.concurrent.Executor; -public interface ParseLiveQueryClient { +import okhttp3.OkHttpClient; +public interface ParseLiveQueryClient { SubscriptionHandling subscribe(ParseQuery query); void unsubscribe(final ParseQuery query); @@ -25,6 +26,10 @@ public static ParseLiveQueryClient getClient(URI uri) { return new ParseLiveQueryClientImpl(uri); } + public static ParseLiveQueryClient getClient(URI uri, OkHttpClient okHttpClient) { + return new ParseLiveQueryClientImpl(uri, okHttpClient); + } + /* package */ static ParseLiveQueryClient getClient(URI uri, WebSocketClientFactory webSocketClientFactory, Executor taskExecutor) { return new ParseLiveQueryClientImpl(uri, webSocketClientFactory, taskExecutor); diff --git a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java index f62e802..b48aaa7 100644 --- a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java +++ b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java @@ -14,6 +14,7 @@ import bolts.Continuation; import bolts.Task; +import okhttp3.OkHttpClient; import static com.parse.Parse.checkInit; @@ -38,7 +39,11 @@ } /* package */ ParseLiveQueryClientImpl(URI uri) { - this(uri, new TubeSockWebSocketClient.TubeWebSocketClientFactory(), Task.BACKGROUND_EXECUTOR); + this(uri, new OkHttp3SocketClientFactory(new OkHttpClient()), Task.BACKGROUND_EXECUTOR); + } + + /* package */ ParseLiveQueryClientImpl(URI uri, OkHttpClient okHttpClient) { + this(uri, new OkHttp3SocketClientFactory(okHttpClient), Task.BACKGROUND_EXECUTOR); } /* package */ ParseLiveQueryClientImpl(URI uri, WebSocketClientFactory webSocketClientFactory, Executor taskExecutor) { From dc91406f6bfeb1e6deecf6fea70c5df58c491acc Mon Sep 17 00:00:00 2001 From: Roger Hu Date: Fri, 24 Mar 2017 16:42:16 -0700 Subject: [PATCH 2/4] Delete TubeSockWebSocketClient --- ParseLiveQuery/build.gradle | 1 - .../com/parse/TubeSockWebSocketClient.java | 92 ------------------- 2 files changed, 93 deletions(-) delete mode 100644 ParseLiveQuery/src/main/java/com/parse/TubeSockWebSocketClient.java diff --git a/ParseLiveQuery/build.gradle b/ParseLiveQuery/build.gradle index f125681..4fa920a 100644 --- a/ParseLiveQuery/build.gradle +++ b/ParseLiveQuery/build.gradle @@ -41,7 +41,6 @@ android { dependencies { compile 'com.parse:parse-android:1.14.0' - compile 'com.firebase:tubesock:0.0.12' compile 'com.squareup.okhttp3:okhttp:3.6.0' compile 'com.parse.bolts:bolts-tasks:1.4.0' diff --git a/ParseLiveQuery/src/main/java/com/parse/TubeSockWebSocketClient.java b/ParseLiveQuery/src/main/java/com/parse/TubeSockWebSocketClient.java deleted file mode 100644 index a008261..0000000 --- a/ParseLiveQuery/src/main/java/com/parse/TubeSockWebSocketClient.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.parse; - -import android.util.Log; - -import com.firebase.tubesock.WebSocket; -import com.firebase.tubesock.WebSocketEventHandler; -import com.firebase.tubesock.WebSocketException; -import com.firebase.tubesock.WebSocketMessage; - -import java.net.URI; -import java.util.Locale; - -/* package */ class TubeSockWebSocketClient implements WebSocketClient { - - private static final String LOG_TAG = "TubeSockWebSocketClient"; - - private final WebSocketClientCallback webSocketClientCallback; - private final WebSocket webSocket; - private State state = State.NONE; - - private final WebSocketEventHandler handler = new WebSocketEventHandler() { - public void onOpen() { - setState(State.CONNECTED); - webSocketClientCallback.onOpen(); - } - - public void onMessage(WebSocketMessage message) { - if (message.isText()) { - webSocketClientCallback.onMessage(message.getText()); - } else { - Log.w(LOG_TAG, String.format(Locale.US, "Socket got into inconsistent state and received %s instead.", message)); - } - } - - public void onClose() { - setState(State.DISCONNECTED); - webSocketClientCallback.onClose(); - } - - public void onError(WebSocketException e) { - webSocketClientCallback.onError(e); - } - - public void onLogMessage(String msg) { - } - }; - - private TubeSockWebSocketClient(WebSocketClientCallback webSocketClientCallback, URI hostUrl) { - this.webSocketClientCallback = webSocketClientCallback; - webSocket = new WebSocket(hostUrl); - webSocket.setEventHandler(handler); - } - - @Override - public synchronized void open() { - if (State.NONE == state) { - webSocket.connect(); - setState(State.CONNECTING); - } - } - - @Override - public synchronized void close() { - setState(State.DISCONNECTING); - webSocket.close(); - } - - @Override - public void send(String message) { - if (state == State.CONNECTED) { - webSocket.send(message); - } - } - - @Override - public State getState() { - return state; - } - - private synchronized void setState(State newState) { - this.state = newState; - this.webSocketClientCallback.stateChanged(); - } - - /* package */ static class TubeWebSocketClientFactory implements WebSocketClientFactory { - @Override - public WebSocketClient createInstance(WebSocketClientCallback webSocketClientCallback, URI hostUrl) { - return new TubeSockWebSocketClient(webSocketClientCallback, hostUrl); - } - } - -} From d6028795edac9d7f275c5abb7187b4a1af33f056 Mon Sep 17 00:00:00 2001 From: Roger Hu Date: Mon, 27 Mar 2017 09:06:24 -0700 Subject: [PATCH 3/4] commit changes --- .../src/main/java/com/parse/OkHttp3SocketClientFactory.java | 4 ---- .../src/main/java/com/parse/ParseLiveQueryClient.java | 6 ++---- .../src/main/java/com/parse/ParseLiveQueryClientImpl.java | 4 ++-- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java b/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java index 0fe1587..e28eb66 100644 --- a/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java +++ b/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java @@ -12,8 +12,6 @@ import okhttp3.WebSocketListener; import okio.ByteString; -/* package */ - /* package */ public class OkHttp3SocketClientFactory implements WebSocketClientFactory { OkHttpClient mClient; @@ -120,8 +118,6 @@ private synchronized void setState(State newState) { this.state = newState; this.webSocketClientCallback.stateChanged(); } - - } } \ No newline at end of file diff --git a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java index 201d523..b661a18 100644 --- a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java +++ b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java @@ -3,8 +3,6 @@ import java.net.URI; import java.util.concurrent.Executor; -import okhttp3.OkHttpClient; - public interface ParseLiveQueryClient { SubscriptionHandling subscribe(ParseQuery query); @@ -26,8 +24,8 @@ public static ParseLiveQueryClient getClient(URI uri) { return new ParseLiveQueryClientImpl(uri); } - public static ParseLiveQueryClient getClient(URI uri, OkHttpClient okHttpClient) { - return new ParseLiveQueryClientImpl(uri, okHttpClient); + public static ParseLiveQueryClient getClient(URI uri, WebSocketClientFactory webSocketClientFactory) { + return new ParseLiveQueryClientImpl(uri, webSocketClientFactory); } /* package */ diff --git a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java index b48aaa7..92389bf 100644 --- a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java +++ b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java @@ -42,8 +42,8 @@ this(uri, new OkHttp3SocketClientFactory(new OkHttpClient()), Task.BACKGROUND_EXECUTOR); } - /* package */ ParseLiveQueryClientImpl(URI uri, OkHttpClient okHttpClient) { - this(uri, new OkHttp3SocketClientFactory(okHttpClient), Task.BACKGROUND_EXECUTOR); + /* package */ ParseLiveQueryClientImpl(URI uri, WebSocketClientFactory webSocketClientFactory) { + this(uri, webSocketClientFactory, Task.BACKGROUND_EXECUTOR); } /* package */ ParseLiveQueryClientImpl(URI uri, WebSocketClientFactory webSocketClientFactory, Executor taskExecutor) { From 7aa257acfbe5784eee5f2e4ca624360b824d9045 Mon Sep 17 00:00:00 2001 From: Roger Hu Date: Mon, 27 Mar 2017 10:25:27 -0700 Subject: [PATCH 4/4] Fix interface --- .../src/main/java/com/parse/OkHttp3SocketClientFactory.java | 4 ---- .../src/main/java/com/parse/ParseLiveQueryClient.java | 6 +++++- .../src/main/java/com/parse/ParseLiveQueryClientImpl.java | 4 ++++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java b/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java index e28eb66..6268b3d 100644 --- a/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java +++ b/ParseLiveQuery/src/main/java/com/parse/OkHttp3SocketClientFactory.java @@ -29,10 +29,6 @@ public WebSocketClient createInstance(WebSocketClient.WebSocketClientCallback we return new OkHttp3WebSocketClient(mClient, webSocketClientCallback, hostUrl); } - public WebSocketClient createInstance(OkHttpClient client, WebSocketClient.WebSocketClientCallback webSocketClientCallback, URI hostUrl) { - return new OkHttp3WebSocketClient(mClient, webSocketClientCallback, hostUrl); - } - class OkHttp3WebSocketClient implements WebSocketClient { private static final String LOG_TAG = "OkHttpWebSocketClient"; diff --git a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java index b661a18..ff554dd 100644 --- a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java +++ b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java @@ -20,11 +20,15 @@ public static ParseLiveQueryClient getClient() { return new ParseLiveQueryClientImpl(); } + public static ParseLiveQueryClient getClient(WebSocketClientFactory webSocketClientFactory) { + return new ParseLiveQueryClientImpl(webSocketClientFactory); + } + public static ParseLiveQueryClient getClient(URI uri) { return new ParseLiveQueryClientImpl(uri); } - public static ParseLiveQueryClient getClient(URI uri, WebSocketClientFactory webSocketClientFactory) { + public static ParseLiveQueryClient getClient(URI uri, WebSocketClientFactory webSocketClientFactory) { return new ParseLiveQueryClientImpl(uri, webSocketClientFactory); } diff --git a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java index 92389bf..1f35343 100644 --- a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java +++ b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java @@ -46,6 +46,10 @@ this(uri, webSocketClientFactory, Task.BACKGROUND_EXECUTOR); } + /* package */ ParseLiveQueryClientImpl(WebSocketClientFactory webSocketClientFactory) { + this(getDefaultUri(), webSocketClientFactory, Task.BACKGROUND_EXECUTOR); + } + /* package */ ParseLiveQueryClientImpl(URI uri, WebSocketClientFactory webSocketClientFactory, Executor taskExecutor) { checkInit(); this.uri = uri;