11package com .parse ;
22
33import android .util .Log ;
4- import android .util .SparseArray ;
5-
4+ import bolts .Continuation ;
5+ import bolts .Task ;
6+ import okhttp3 .OkHttpClient ;
67import org .json .JSONException ;
78import org .json .JSONObject ;
89
1314import java .util .Arrays ;
1415import java .util .List ;
1516import java .util .concurrent .Callable ;
17+ import java .util .concurrent .ConcurrentHashMap ;
1618import java .util .concurrent .Executor ;
1719
18- import bolts .Continuation ;
19- import bolts .Task ;
20- import okhttp3 .OkHttpClient ;
21-
2220import static com .parse .Parse .checkInit ;
2321
2422/* package */ class ParseLiveQueryClientImpl implements ParseLiveQueryClient {
2826 private final Executor taskExecutor ;
2927 private final String applicationId ;
3028 private final String clientKey ;
31- private final SparseArray < Subscription <? extends ParseObject >> subscriptions = new SparseArray <>();
29+ private final ConcurrentHashMap < Integer , Subscription <? extends ParseObject >> subscriptions = new ConcurrentHashMap <>();
3230 private final URI uri ;
3331 private final WebSocketClientFactory webSocketClientFactory ;
3432 private final WebSocketClient .WebSocketClientCallback webSocketClientCallback ;
@@ -87,7 +85,7 @@ private static URI getDefaultUri() {
8785 public <T extends ParseObject > SubscriptionHandling <T > subscribe (ParseQuery <T > query ) {
8886 int requestId = requestIdGenerator ();
8987 Subscription <T > subscription = new Subscription <>(requestId , query );
90- subscriptions .append (requestId , subscription );
88+ subscriptions .put (requestId , subscription );
9189
9290 if (isConnected ()) {
9391 sendSubscription (subscription );
@@ -124,8 +122,7 @@ public void connectIfNeeded() {
124122 @ Override
125123 public <T extends ParseObject > void unsubscribe (final ParseQuery <T > query ) {
126124 if (query != null ) {
127- for (int i = 0 ; i < subscriptions .size (); i ++) {
128- Subscription subscription = subscriptions .valueAt (i );
125+ for (Subscription <? extends ParseObject > subscription : subscriptions .values ()) {
129126 if (query .equals (subscription .getQuery ())) {
130127 sendUnsubscription (subscription );
131128 }
@@ -136,8 +133,7 @@ public <T extends ParseObject> void unsubscribe(final ParseQuery<T> query) {
136133 @ Override
137134 public <T extends ParseObject > void unsubscribe (final ParseQuery <T > query , final SubscriptionHandling <T > subscriptionHandling ) {
138135 if (query != null && subscriptionHandling != null ) {
139- for (int i = 0 ; i < subscriptions .size (); i ++) {
140- Subscription subscription = subscriptions .valueAt (i );
136+ for (Subscription <? extends ParseObject > subscription : subscriptions .values ()) {
141137 if (query .equals (subscription .getQuery ()) && subscriptionHandling .equals (subscription )) {
142138 sendUnsubscription (subscription );
143139 }
@@ -230,8 +226,8 @@ private void parseMessage(String message) throws LiveQueryException {
230226 hasReceivedConnected = true ;
231227 dispatchConnected ();
232228 Log .v (LOG_TAG , "Connected, sending pending subscription" );
233- for (int i = 0 ; i < subscriptions .size (); i ++ ) {
234- sendSubscription (subscriptions . valueAt ( i ) );
229+ for (Subscription <? extends ParseObject > subscription : subscriptions .values () ) {
230+ sendSubscription (subscription );
235231 }
236232 break ;
237233 case "redirect" :
0 commit comments