From b5f3ccc4148ded577d81bc90b48867db31386049 Mon Sep 17 00:00:00 2001 From: Michael Mimeault Date: Tue, 27 Mar 2018 16:07:12 -0400 Subject: [PATCH] Back the subscriptions by a thread safe collection map --- .../com/parse/ParseLiveQueryClientImpl.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java index 73380a8..a6d1161 100644 --- a/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java +++ b/ParseLiveQuery/src/main/java/com/parse/ParseLiveQueryClientImpl.java @@ -1,8 +1,9 @@ package com.parse; import android.util.Log; -import android.util.SparseArray; - +import bolts.Continuation; +import bolts.Task; +import okhttp3.OkHttpClient; import org.json.JSONException; import org.json.JSONObject; @@ -13,12 +14,9 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; -import bolts.Continuation; -import bolts.Task; -import okhttp3.OkHttpClient; - import static com.parse.Parse.checkInit; /* package */ class ParseLiveQueryClientImpl implements ParseLiveQueryClient { @@ -28,7 +26,7 @@ private final Executor taskExecutor; private final String applicationId; private final String clientKey; - private final SparseArray> subscriptions = new SparseArray<>(); + private final ConcurrentHashMap> subscriptions = new ConcurrentHashMap<>(); private final URI uri; private final WebSocketClientFactory webSocketClientFactory; private final WebSocketClient.WebSocketClientCallback webSocketClientCallback; @@ -87,7 +85,7 @@ private static URI getDefaultUri() { public SubscriptionHandling subscribe(ParseQuery query) { int requestId = requestIdGenerator(); Subscription subscription = new Subscription<>(requestId, query); - subscriptions.append(requestId, subscription); + subscriptions.put(requestId, subscription); if (isConnected()) { sendSubscription(subscription); @@ -124,8 +122,7 @@ public void connectIfNeeded() { @Override public void unsubscribe(final ParseQuery query) { if (query != null) { - for (int i = 0; i < subscriptions.size(); i++) { - Subscription subscription = subscriptions.valueAt(i); + for (Subscription subscription : subscriptions.values()) { if (query.equals(subscription.getQuery())) { sendUnsubscription(subscription); } @@ -136,8 +133,7 @@ public void unsubscribe(final ParseQuery query) { @Override public void unsubscribe(final ParseQuery query, final SubscriptionHandling subscriptionHandling) { if (query != null && subscriptionHandling != null) { - for (int i = 0; i < subscriptions.size(); i++) { - Subscription subscription = subscriptions.valueAt(i); + for (Subscription subscription : subscriptions.values()) { if (query.equals(subscription.getQuery()) && subscriptionHandling.equals(subscription)) { sendUnsubscription(subscription); } @@ -230,8 +226,8 @@ private void parseMessage(String message) throws LiveQueryException { hasReceivedConnected = true; dispatchConnected(); Log.v(LOG_TAG, "Connected, sending pending subscription"); - for (int i = 0; i < subscriptions.size(); i++) { - sendSubscription(subscriptions.valueAt(i)); + for (Subscription subscription : subscriptions.values()) { + sendSubscription(subscription); } break; case "redirect":