Ejemplo n.º 1
0
        public Uploader StartUpload(string apiKey, string apiSecret, string apiBase, DS4Session session)
        {
            Uploader uploader;

            if (!_uploaders.TryGetValue(session, out uploader))
            {
                uploader             = new Uploader(apiKey, apiSecret, apiBase, session);
                uploader.Completing += (sender, e) =>
                {
                    if (e.Success)
                    {
                        //session.Metadata.BodyhubPersonId = e.BodyhubPersonId;
                        //_store.Save();
                    }
                };

                _uploaders[session] = uploader;
            }

            if (!File.Exists(session.CompressedScanFile))
            {
                // Something went wrong probably during Compression and file is deleted
                throw new InvalidOperationException("Compressed Scan file is missing!");
            }

            session.Uploader = uploader;

            if (uploader.Waiting)
            {
                throw new InvalidOperationException("Uploader is already enqueued for upload");
            }
            else if (uploader.InProgress)
            {
                throw new InvalidOperationException("Upload is already in progress");
            }
            else if (uploader.ReTrying)
            {
                AutoReTryer autoReTryer = uploader.ReTryer;

                if (autoReTryer == null)
                {
                    throw new InvalidOperationException("Uploader in ReTrying state should have a ReTryer registered");
                }

                autoReTryer.StartNow();
            }
            else
            {
                EnqueueUploadWork(uploader);
            }
            return(uploader);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Processing upload result and re-upload using a linear back-off function
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Workqueue_UploadWorkCompleted(object sender, WorkCompletedEventArgs <Uploader, UploadResult> e)
        {
            Uploader     uploader = e.WorkItem;
            UploadResult result   = e.Result;

            if (result.Exception != null && !result.Canceled)
            {
                //Re-upload
                AutoReTryer autoReTryer = uploader.ReTryer;

                if (autoReTryer == null)
                {
                    autoReTryer = new AutoReTryer(
                        () => EnqueueUploadWork(uploader),
                        (seq) => seq + 1,
                        REUPLOAD_INTERVAL_IN_SECONDS);
                    uploader.ReTryer = autoReTryer;
                }

                autoReTryer.StartOrContinueCountdown();
            }
        }