private bool ReceivedPollResponse(IJsonSerializer jsonReader, CancellationToken token, ref bool timedOut) { bool started = false; var start = DateTime.Now; token.Register(() => { jsonReader.StopIncrementalParse(); }); try { while (jsonReader.Read() && !token.IsCancellationRequested) { _pauseWait.Wait(); if (jsonReader.CurrentToken == JsonToken.StartArray) { timedOut = true; started = true; } else if (jsonReader.CurrentToken == JsonToken.EndArray) { started = false; } else if (started) { IDictionary <string, object> change; try { change = jsonReader.DeserializeNextObject <IDictionary <string, object> >(); } catch (Exception e) { var ex = e as CouchbaseLiteException; if (ex == null || ex.Code != StatusCode.BadJson) { Log.To.ChangeTracker.W(Tag, "Failure during change tracker JSON parsing", e); throw; } return(false); } if (OnChangeFound != null) { OnChangeFound(change); } timedOut = false; } } } catch (CouchbaseLiteException e) { var elapsed = DateTime.Now - start; timedOut = timedOut && elapsed.TotalSeconds >= 30; if (e.CBLStatus.Code == StatusCode.BadJson && timedOut) { return(false); } throw; } return(true); }
public bool ReceivedPollResponse(IJsonSerializer jsonReader, ref bool timedOut) { bool started = false; var start = DateTime.Now; try { while (jsonReader.Read()) { _pauseWait.Wait(); if (jsonReader.CurrentToken == JsonToken.StartArray) { timedOut = true; started = true; } else if (jsonReader.CurrentToken == JsonToken.EndArray) { started = false; } else if (started) { IDictionary <string, object> change; try { change = jsonReader.DeserializeNextObject(); } catch (Exception e) { var ex = e as CouchbaseLiteException; if (ex == null || ex.Code != StatusCode.BadJson) { Log.E(TAG, "Failure during change tracker JSON parsing", e); throw; } return(false); } if (!ReceivedChange(change)) { Log.W(TAG, String.Format("Received unparseable change line from server: {0}", change)); return(false); } timedOut = false; } } } catch (CouchbaseLiteException e) { var elapsed = DateTime.Now - start; timedOut = timedOut && elapsed.TotalSeconds >= 30; if (e.CBLStatus.Code == StatusCode.BadJson && timedOut) { return(false); } throw; } return(true); }
private bool ReceivedPollResponse(IJsonSerializer jsonReader, CancellationToken token, ref bool timedOut) { bool started = false; var start = DateTime.Now; try { while (jsonReader.Read() && !token.IsCancellationRequested) { _pauseWait.Wait(); if (jsonReader.CurrentToken == JsonToken.StartArray) { timedOut = true; started = true; } else if (jsonReader.CurrentToken == JsonToken.EndArray) { started = false; } else if (started) { IDictionary<string, object> change; try { change = jsonReader.DeserializeNextObject<IDictionary<string, object>>(); } catch(Exception e) { var ex = e as CouchbaseLiteException; if (ex == null || ex.Code != StatusCode.BadJson) { Log.To.ChangeTracker.W(Tag, "Failure during change tracker JSON parsing", e); throw; } return false; } if(OnChangeFound != null) { OnChangeFound(change); } timedOut = false; } } } catch (CouchbaseLiteException e) { var elapsed = DateTime.Now - start; timedOut = timedOut && elapsed.TotalSeconds >= 30; if (e.CBLStatus.Code == StatusCode.BadJson && timedOut) { return false; } throw; } return true; }
public bool ReceivedPollResponse(IJsonSerializer jsonReader, ref bool timedOut) { bool started = false; var start = DateTime.Now; try { while (jsonReader.Read()) { _pauseWait.Wait(); if (jsonReader.CurrentToken == JsonToken.StartArray) { timedOut = true; started = true; } else if (jsonReader.CurrentToken == JsonToken.EndArray) { started = false; } else if (started) { IDictionary<string, object> change; try { change = jsonReader.DeserializeNextObject(); } catch(Exception e) { var ex = e as CouchbaseLiteException; if (ex == null || ex.Code != StatusCode.BadJson) { Log.E(TAG, "Failure during change tracker JSON parsing", e); throw; } return false; } if (!ReceivedChange(change)) { Log.W(TAG, String.Format("Received unparseable change line from server: {0}", change)); return false; } timedOut = false; } } } catch (CouchbaseLiteException e) { var elapsed = DateTime.Now - start; timedOut = timedOut && elapsed.TotalSeconds >= 30; if (e.CBLStatus.Code == StatusCode.BadJson && timedOut) { return false; } throw; } return true; }