Skip to content

Commit 4a603ad

Browse files
committed
Rename interface to OkHttp3SocketClientFactory.java. Modify ParseLiveQueryClient to accept OkHttpClient instances.
1 parent f6e5c4d commit 4a603ad

File tree

4 files changed

+139
-112
lines changed

4 files changed

+139
-112
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package com.parse;
2+
3+
import android.util.Log;
4+
5+
import java.net.URI;
6+
import java.util.Locale;
7+
8+
import okhttp3.OkHttpClient;
9+
import okhttp3.Request;
10+
import okhttp3.Response;
11+
import okhttp3.WebSocket;
12+
import okhttp3.WebSocketListener;
13+
import okio.ByteString;
14+
15+
/* package */
16+
17+
/* package */ public class OkHttp3SocketClientFactory implements WebSocketClientFactory {
18+
19+
OkHttpClient mClient;
20+
21+
public OkHttp3SocketClientFactory(OkHttpClient client) {
22+
mClient = client;
23+
}
24+
25+
public OkHttp3SocketClientFactory() {
26+
mClient = new OkHttpClient();
27+
}
28+
29+
@Override
30+
public WebSocketClient createInstance(WebSocketClient.WebSocketClientCallback webSocketClientCallback, URI hostUrl) {
31+
return new OkHttp3WebSocketClient(mClient, webSocketClientCallback, hostUrl);
32+
}
33+
34+
public WebSocketClient createInstance(OkHttpClient client, WebSocketClient.WebSocketClientCallback webSocketClientCallback, URI hostUrl) {
35+
return new OkHttp3WebSocketClient(mClient, webSocketClientCallback, hostUrl);
36+
}
37+
38+
class OkHttp3WebSocketClient implements WebSocketClient {
39+
40+
private static final String LOG_TAG = "OkHttpWebSocketClient";
41+
42+
private final WebSocketClientCallback webSocketClientCallback;
43+
private WebSocket webSocket;
44+
private State state = State.NONE;
45+
private final OkHttpClient client;
46+
private final String url;
47+
private final int STATUS_CODE = 200;
48+
private final String CLOSING_MSG = "User invoked close";
49+
50+
private final WebSocketListener handler = new WebSocketListener() {
51+
@Override
52+
public void onOpen(WebSocket webSocket, Response response) {
53+
setState(State.CONNECTED);
54+
webSocketClientCallback.onOpen();
55+
}
56+
57+
@Override
58+
public void onMessage(WebSocket webSocket, String text) {
59+
webSocketClientCallback.onMessage(text);
60+
}
61+
62+
@Override
63+
public void onMessage(WebSocket webSocket, ByteString bytes) {
64+
Log.w(LOG_TAG, String.format(Locale.US,
65+
"Socket got into inconsistent state and received %s instead.",
66+
bytes.toString()));
67+
}
68+
69+
@Override
70+
public void onClosed(WebSocket webSocket, int code, String reason) {
71+
setState(State.DISCONNECTED);
72+
webSocketClientCallback.onClose();
73+
}
74+
75+
@Override
76+
public void onFailure(okhttp3.WebSocket webSocket, Throwable t, Response response) {
77+
webSocketClientCallback.onError(t);
78+
}
79+
};
80+
81+
private OkHttp3WebSocketClient(OkHttpClient okHttpClient,
82+
WebSocketClientCallback webSocketClientCallback, URI hostUrl) {
83+
client = okHttpClient;
84+
this.webSocketClientCallback = webSocketClientCallback;
85+
url = hostUrl.toString();
86+
}
87+
88+
@Override
89+
public synchronized void open() {
90+
if (State.NONE == state) {
91+
// OkHttp3 connects as soon as the socket is created so do it here.
92+
Request request = new Request.Builder()
93+
.url(url)
94+
.build();
95+
96+
webSocket = client.newWebSocket(request, handler);
97+
setState(State.CONNECTING);
98+
}
99+
}
100+
101+
@Override
102+
public synchronized void close() {
103+
setState(State.DISCONNECTING);
104+
webSocket.close(STATUS_CODE, CLOSING_MSG);
105+
}
106+
107+
@Override
108+
public void send(String message) {
109+
if (state == State.CONNECTED) {
110+
webSocket.send(message);
111+
}
112+
}
113+
114+
@Override
115+
public State getState() {
116+
return state;
117+
}
118+
119+
private synchronized void setState(State newState) {
120+
this.state = newState;
121+
this.webSocketClientCallback.stateChanged();
122+
}
123+
124+
125+
}
126+
127+
}

ParseLiveQuery/src/main/java/com/parse/OkHttp3WebSocketClient.java

Lines changed: 0 additions & 110 deletions
This file was deleted.

ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClient.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import java.net.URI;
44
import java.util.concurrent.Executor;
55

6-
public interface ParseLiveQueryClient {
6+
import okhttp3.OkHttpClient;
77

8+
public interface ParseLiveQueryClient {
89
<T extends ParseObject> SubscriptionHandling<T> subscribe(ParseQuery<T> query);
910

1011
<T extends ParseObject> void unsubscribe(final ParseQuery<T> query);
@@ -21,6 +22,10 @@ public static ParseLiveQueryClient getClient(URI uri) {
2122
return new ParseLiveQueryClientImpl(uri);
2223
}
2324

25+
public static <T extends ParseObject> ParseLiveQueryClient getClient(URI uri, OkHttpClient okHttpClient) {
26+
return new ParseLiveQueryClientImpl(uri, okHttpClient);
27+
}
28+
2429
/* package */
2530
static ParseLiveQueryClient getClient(URI uri, WebSocketClientFactory webSocketClientFactory, Executor taskExecutor) {
2631
return new ParseLiveQueryClientImpl(uri, webSocketClientFactory, taskExecutor);

ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import bolts.Continuation;
1414
import bolts.Task;
15+
import okhttp3.OkHttpClient;
1516

1617
import static com.parse.Parse.checkInit;
1718

@@ -32,7 +33,11 @@
3233
private boolean userInitiatedDisconnect = false;
3334

3435
/* package */ ParseLiveQueryClientImpl(URI uri) {
35-
this(uri, new TubeSockWebSocketClient.TubeWebSocketClientFactory(), Task.BACKGROUND_EXECUTOR);
36+
this(uri, new OkHttp3SocketClientFactory(new OkHttpClient()), Task.BACKGROUND_EXECUTOR);
37+
}
38+
39+
/* package */ ParseLiveQueryClientImpl(URI uri, OkHttpClient okHttpClient) {
40+
this(uri, new OkHttp3SocketClientFactory(okHttpClient), Task.BACKGROUND_EXECUTOR);
3641
}
3742

3843
/* package */ ParseLiveQueryClientImpl(URI uri, WebSocketClientFactory webSocketClientFactory, Executor taskExecutor) {

0 commit comments

Comments
 (0)