public SocketChangeTracker(ChangeTrackerOptions options) : base(options)
        {
            if (options.Mode == ChangeTrackerMode.LongPoll)
            {
                Continuous = true;
            }

            tokenSource               = new CancellationTokenSource();
            _responseLogic            = ChangeTrackerResponseLogicFactory.CreateLogic(this);
            _responseLogic.OnCaughtUp = () =>
            {
                Client?.ChangeTrackerCaughtUp(this);
                _caughtUp = true;
            };

            _responseLogic.OnChangeFound = (change) =>
            {
                if (!ReceivedChange(change))
                {
                    Log.To.ChangeTracker.W(Tag, "Received unparseable change from server {0}", new LogJsonString(change));
                }
            };

            _responseLogic.OnFinished = RetryOrStopIfNecessary;
        }
 public static ChangeTracker Create(ChangeTrackerOptions options)
 {
     if (options.Mode == ChangeTrackerMode.WebSocket)
     {
         return(new WebSocketChangeTracker(options));
     }
     else
     {
         return(new SocketChangeTracker(options));
     }
 }
 protected ChangeTracker(ChangeTrackerOptions options)
 {
     options.Validate();
     Backoff           = new ChangeTrackerBackoff(options.RetryStrategy);
     DatabaseUrl       = options.DatabaseUri;
     Client            = options.Client;
     Mode              = options.Mode;
     Heartbeat         = DefaultHeartbeat;
     _includeConflicts = options.IncludeConflicts;
     LastSequenceId    = options.LastSequenceID;
     _workExecutor     = options.WorkExecutor ?? new TaskFactory(new SingleTaskThreadpoolScheduler());
     _remoteSession    = options.RemoteSession;
     _usePost          = options.UsePost;
 }
 public WebSocketChangeTracker(ChangeTrackerOptions options) : base(options)
 {
     _responseLogic = new WebSocketLogic();
     CanConnect     = true;
 }
 public WebSocketChangeTracker(ChangeTrackerOptions options) : base(options)
 {
     CanConnect = true;
 }