Skip to content
This repository was archived by the owner on Sep 17, 2023. It is now read-only.

Commit f0783e5

Browse files
SamuelWeibeldanielwertheim
authored andcommitted
Catching exceptions in Changes.ObserveContinuous()
Handles negative responses and server side errors. (#176)
1 parent 67aa244 commit f0783e5

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

source/projects/MyCouch/Contexts/Changes.cs

+9-3
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,13 @@ public virtual IObservable<string> ObserveContinuous(GetChangesRequest request,
9797

9898
Task.Factory.StartNew(async () =>
9999
{
100-
using (var httpResponse = await SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ForAwait())
100+
try
101101
{
102-
var response = await ContinuousChangesResponseFactory.CreateAsync(httpResponse).ForAwait();
103-
if (response.IsSuccess)
102+
using (var httpResponse = await SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ForAwait())
104103
{
104+
var response = await ContinuousChangesResponseFactory.CreateAsync(httpResponse).ForAwait();
105+
if (!response.IsSuccess)
106+
throw new MyCouchResponseException(response);
105107
using (var content = await httpResponse.Content.ReadAsStreamAsync().ForAwait())
106108
{
107109
using (var reader = new StreamReader(content, MyCouchRuntime.DefaultEncoding))
@@ -117,6 +119,10 @@ public virtual IObservable<string> ObserveContinuous(GetChangesRequest request,
117119
}
118120
}
119121
}
122+
catch (Exception e)
123+
{
124+
ob.Error(e);
125+
}
120126
}, cancellationToken).ForAwait();
121127

122128
return ob;

source/projects/MyCouch/MyObservable.cs

+9
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@ public virtual void Complete()
3838
observer.OnCompleted();
3939
}
4040

41+
public virtual void Error(Exception error)
42+
{
43+
var obs = _observers.ToArray();
44+
_observers.Clear();
45+
46+
foreach (var observer in obs)
47+
observer.OnError(error);
48+
}
49+
4150
private class Unsubscriber : IDisposable
4251
{
4352
private readonly IList<IObserver<T>> _observers;

0 commit comments

Comments
 (0)