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);
        }
Example #2
0
        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;
        }