Search in sources :

Example 46 with Task

use of bolts.Task in project Rocket.Chat.Android by RocketChat.

the class DDPClientImpl method ping.

public void ping(final TaskCompletionSource<DDPClientCallback.Ping> task, @Nullable final String id) {
    final boolean requested = (TextUtils.isEmpty(id)) ? sendMessage("ping", null) : sendMessage("ping", json -> json.put("id", id));
    if (requested) {
        CompositeDisposable subscriptions = new CompositeDisposable();
        subscriptions.add(flowable.filter(callback -> callback instanceof RxWebSocketCallback.Message).map(callback -> ((RxWebSocketCallback.Message) callback).responseBodyString).map(DDPClientImpl::toJson).timeout(4, TimeUnit.SECONDS).subscribe(response -> {
            String msg = extractMsg(response);
            if ("pong".equals(msg)) {
                if (response.isNull("id")) {
                    task.setResult(new DDPClientCallback.Ping(client, null));
                    subscriptions.dispose();
                } else {
                    String _id = response.optString("id");
                    if (id.equals(_id)) {
                        task.setResult(new DDPClientCallback.Ping(client, id));
                        subscriptions.dispose();
                    }
                }
            }
        }, err -> task.setError(new DDPClientCallback.Ping.Timeout(client))));
        addErrorCallback(subscriptions, task);
    } else {
        task.trySetError(new DDPClientCallback.Closed(client));
    }
}
Also used : RxWebSocketCallback(chat.rocket.android_ddp.rx.RxWebSocketCallback) TimeoutException(java.util.concurrent.TimeoutException) TextUtils(android.text.TextUtils) NonNull(android.support.annotation.NonNull) RCLog(chat.rocket.android.log.RCLog) TaskCompletionSource(bolts.TaskCompletionSource) TimeUnit(java.util.concurrent.TimeUnit) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) JSONException(org.json.JSONException) RxWebSocket(chat.rocket.android_ddp.rx.RxWebSocket) JSONObject(org.json.JSONObject) OkHttpClient(okhttp3.OkHttpClient) Flowable(io.reactivex.Flowable) Nullable(android.support.annotation.Nullable) Task(bolts.Task) JSONArray(org.json.JSONArray) RxWebSocketCallback(chat.rocket.android_ddp.rx.RxWebSocketCallback) CompositeDisposable(io.reactivex.disposables.CompositeDisposable)

Aggregations

Task (bolts.Task)46 JSONObject (org.json.JSONObject)27 Continuation (bolts.Continuation)23 JSONException (org.json.JSONException)20 ArrayList (java.util.ArrayList)15 JSONArray (org.json.JSONArray)14 RCLog (chat.rocket.android.log.RCLog)11 TaskCompletionSource (bolts.TaskCompletionSource)10 List (java.util.List)8 Context (android.content.Context)7 Uri (android.net.Uri)7 RealmHelper (chat.rocket.persistence.realm.RealmHelper)7 CancellationException (java.util.concurrent.CancellationException)7 TextUtils (android.text.TextUtils)6 SyncState (chat.rocket.core.SyncState)6 IOException (java.io.IOException)6 NonNull (android.support.annotation.NonNull)5 Nullable (android.support.annotation.Nullable)5 AggregateException (bolts.AggregateException)5 AppLink (bolts.AppLink)5