/// <summary>
        /// Start the requester with any unsent URIs from the last application run.
        /// </summary>
        protected void StartRequester()
        {
            SetupRequester();
            backgroundRequester = new BackgroundUriRequester(Request, IsInternetAvailable);

            var previousRequests = Load <List <Uri> >(QueueStorageName);

            backgroundRequester.Start(lastUploadInterval, previousRequests);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Start the requester with any unsent URIs from the last application run.
        /// </summary>
        /// <returns>Task that completes when the requester is ready.</returns>
        protected async Task StartRequesterAsync()
        {
            await SetupRequesterAsync();

            backgroundRequester = new BackgroundUriRequester(Request, IsInternetAvailable);

            var previousRequests = await Load <List <Uri> >(QueueStorageName);

            backgroundRequester.Start(lastUploadInterval, previousRequests);
        }
        public static void WaitForQueueToEmpty(BackgroundUriRequester requester)
        {
            var time = new Stopwatch();

            time.Start();

            while (requester.QueueCount != 0 && time.Elapsed < timeout)
            {
                Task.Delay(TimeSpan.FromMilliseconds(100)).Wait();
            }
        }
Exemplo n.º 4
0
        public void BackgroundUriRequester_Start_Uses_Previous_List()
        {
            var expectedList = TestHelpers.CreateRequestList(4);
            var actualList   = new List <Uri>();
            Func <Uri, CancellationToken, bool> processor = (u, c) => { actualList.Add(u); return(true); };

            var requester = new BackgroundUriRequester(processor);

            requester.Start(TimeSpan.FromMilliseconds(10), expectedList);

            TestHelpers.WaitForQueueToEmpty(requester);
            Assert.AreEqual(expectedList.Count, actualList.Count);
            CollectionAssert.AreEqual(expectedList, actualList);
        }
Exemplo n.º 5
0
        public async Task BackgroundUriRequester_StopAsync_Stops_Current_Active_Request()
        {
            var cancelled = false;
            Func <Uri, CancellationToken, bool> processor = (u, c) => DoProcessing(c, out cancelled);

            var requester = new BackgroundUriRequester(processor);

            requester.Add(TestHelpers.CreateRequestList(1)[0]);
            requester.Start(TimeSpan.FromMilliseconds(10));

            await Task.Delay(TimeSpan.FromSeconds(1), CancellationToken.None);

            Assert.IsFalse(cancelled);
            await requester.StopAsync();

            Assert.IsTrue(cancelled);
        }
Exemplo n.º 6
0
        public void BackgroundUriRequester_StopAsync_Stops_Requesting()
        {
            var actualList = new List <Uri>();
            Func <Uri, CancellationToken, bool> processor = (u, c) => { actualList.Add(u); return(true); };

            var requester = new BackgroundUriRequester(processor);

            requester.Start(TimeSpan.FromMilliseconds(10));

            Task.Delay(1000, CancellationToken.None).GetAwaiter().GetResult();

            requester.StopAsync().Wait(CancellationToken.None);
            foreach (var uri in TestHelpers.CreateRequestList(3))
            {
                requester.Add(uri);
            }

            Assert.AreEqual(0, actualList.Count);
            Assert.AreEqual(3, requester.QueueCount);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Suspend the requester and preserve any unsent URIs.
        /// </summary>
        protected void StopRequesterAsync()
        {
            var safeBackgroundRequester = backgroundRequester;

            if (safeBackgroundRequester == null)
            {
                return;
            }

            var recentRequestsToPersist = new List <Uri>();

            if (safeBackgroundRequester.IsStarted)
            {
                var pendingRequests = safeBackgroundRequester.StopAsync().GetAwaiter().GetResult();
                recentRequestsToPersist = pendingRequests.Skip(pendingRequests.Count - MaximumRequestsToPersist).ToList();
            }

            Save(recentRequestsToPersist, QueueStorageName);
            Save(sessionManager.GetState(), SessionStorageName);

            safeBackgroundRequester.Dispose();
            backgroundRequester = null;
        }