Commit 54632d59 authored by Tiago Cunha's avatar Tiago Cunha

Adding extra on error handler

parent dd29cdd7
......@@ -54,17 +54,25 @@ public class DDPClientImpl {
flowable = websocket.connect(url).autoConnect();
CompositeDisposable subscriptions = new CompositeDisposable();
subscriptions.add(flowable.filter(callback -> callback instanceof RxWebSocketCallback.Open)
.subscribe(callback -> {
subscriptions.add(
flowable.filter(callback -> callback instanceof RxWebSocketCallback.Open)
.subscribe(
callback -> {
sendMessage("connect",
json -> (TextUtils.isEmpty(session) ? json : json.put("session", session)).put(
"version", "pre2").put("support", new JSONArray().put("pre2").put("pre1")),
json -> (TextUtils.isEmpty(session) ? json : json.put("session", session))
.put(
"version", "pre2")
.put("support", new JSONArray().put("pre2").put("pre1")),
task);
}, err -> {
}));
},
err -> {
}
)
);
subscriptions.add(
flowable.filter(callback -> callback instanceof RxWebSocketCallback.Message)
flowable.filter(
callback -> callback instanceof RxWebSocketCallback.Message)
.map(callback -> ((RxWebSocketCallback.Message) callback).responseBodyString)
.map(DDPClientImpl::toJson)
.timeout(7, TimeUnit.SECONDS)
......@@ -83,9 +91,10 @@ public class DDPClientImpl {
new DDPClientCallback.Connect.Failed(client, response.optString("version")));
subscriptions.dispose();
}
}, err -> {
task.trySetError(new DDPClientCallback.Connect.Timeout(client));
}));
},
err -> task.trySetError(new DDPClientCallback.Connect.Timeout(client))
)
);
addErrorCallback(subscriptions, task);
......@@ -110,7 +119,8 @@ public class DDPClientImpl {
.map(callback -> ((RxWebSocketCallback.Message) callback).responseBodyString)
.map(DDPClientImpl::toJson)
.timeout(4, TimeUnit.SECONDS)
.subscribe(response -> {
.subscribe(
response -> {
String msg = extractMsg(response);
if ("pong".equals(msg)) {
if (response.isNull("id")) {
......@@ -124,9 +134,10 @@ public class DDPClientImpl {
}
}
}
}, err -> {
task.setError(new DDPClientCallback.Ping.Timeout(client));
}));
},
err -> task.setError(new DDPClientCallback.Ping.Timeout(client))
)
);
addErrorCallback(subscriptions, task);
} else {
......@@ -146,7 +157,8 @@ public class DDPClientImpl {
flowable.filter(callback -> callback instanceof RxWebSocketCallback.Message)
.map(callback -> ((RxWebSocketCallback.Message) callback).responseBodyString)
.map(DDPClientImpl::toJson)
.subscribe(response -> {
.subscribe(
response -> {
String msg = extractMsg(response);
if ("ready".equals(msg) && !response.isNull("subs")) {
JSONArray ids = response.optJSONArray("subs");
......@@ -167,8 +179,11 @@ public class DDPClientImpl {
subscriptions.dispose();
}
}
}, err -> {
}));
},
err -> {
}
)
);
addErrorCallback(subscriptions, task);
} else {
......@@ -188,7 +203,8 @@ public class DDPClientImpl {
flowable.filter(callback -> callback instanceof RxWebSocketCallback.Message)
.map(callback -> ((RxWebSocketCallback.Message) callback).responseBodyString)
.map(DDPClientImpl::toJson)
.subscribe(response -> {
.subscribe(
response -> {
String msg = extractMsg(response);
if ("nosub".equals(msg) && response.isNull("error") && !response.isNull("id")) {
String _id = response.optString("id");
......@@ -197,8 +213,11 @@ public class DDPClientImpl {
subscriptions.dispose();
}
}
}, err -> {
}));
},
err -> {
}
)
);
addErrorCallback(subscriptions, task);
} else {
......@@ -220,7 +239,8 @@ public class DDPClientImpl {
.map(callback -> ((RxWebSocketCallback.Message) callback).responseBodyString)
.map(DDPClientImpl::toJson)
.timeout(timeoutMs, TimeUnit.MILLISECONDS)
.subscribe(response -> {
.subscribe(
response -> {
String msg = extractMsg(response);
if ("result".equals(msg)) {
String _id = response.optString("id");
......@@ -235,11 +255,14 @@ public class DDPClientImpl {
subscriptions.dispose();
}
}
}, err -> {
},
err -> {
if (err instanceof TimeoutException) {
task.setError(new DDPClientCallback.RPC.Timeout(client));
}
}));
}
)
);
addErrorCallback(subscriptions, task);
} else {
......@@ -258,7 +281,8 @@ public class DDPClientImpl {
flowable.filter(callback -> callback instanceof RxWebSocketCallback.Message)
.map(callback -> ((RxWebSocketCallback.Message) callback).responseBodyString)
.map(DDPClientImpl::toJson)
.subscribe(response -> {
.subscribe(
response -> {
String msg = extractMsg(response);
if ("ping".equals(msg)) {
if (response.isNull("id")) {
......@@ -267,8 +291,11 @@ public class DDPClientImpl {
sendMessage("pong", json -> json.put("id", response.getString("id")));
}
}
}, err -> {
}));
},
err -> {
}
)
);
}
public Flowable<DDPSubscription.Event> getDDPSubscription() {
......@@ -325,13 +352,16 @@ public class DDPClientImpl {
flowable.filter(callback -> callback instanceof RxWebSocketCallback.Close)
.cast(RxWebSocketCallback.Close.class)
.subscribe(task::setResult, err -> {
.subscribe(
task::setResult,
err -> {
if (err instanceof Exception) {
task.setError((Exception) err);
} else {
task.setError(new Exception(err));
}
});
}
);
return task.getTask().onSuccessTask(_task -> {
unsubscribeBaseListeners();
......@@ -358,11 +388,16 @@ public class DDPClientImpl {
}
private void addErrorCallback(CompositeDisposable subscriptions, TaskCompletionSource<?> task) {
subscriptions.add(flowable.subscribe(base -> {
}, err -> {
subscriptions.add(
flowable.subscribe(
base -> {
},
err -> {
task.trySetError(new Exception(err));
subscriptions.dispose();
}));
}
)
);
}
public void close(int code, String reason) {
......
......@@ -99,7 +99,8 @@ public abstract class AbstractDDPDocEventSubscriber implements Registrable {
.filter(event -> event instanceof DDPSubscription.DocEvent)
.cast(DDPSubscription.DocEvent.class)
.filter(event -> isTarget(event.collection))
.subscribe(docEvent -> {
.subscribe(
docEvent -> {
try {
if (docEvent instanceof DDPSubscription.Added.Before) {
onDocumentAdded((DDPSubscription.Added) docEvent); //ignore Before
......@@ -115,7 +116,10 @@ public abstract class AbstractDDPDocEventSubscriber implements Registrable {
} catch (Exception exception) {
RCLog.w(exception, "failed to handle subscription callback");
}
});
},
throwable -> {
}
);
}
protected void onDocumentAdded(DDPSubscription.Added docEvent) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment