protected override void BeginRequest(RetryQueueRequest request)
        {
            var downloadRequest = request as DownloadRequest;

            if (downloadRequest != null)
            {
                _rateMonitor.UpdateRate();
                if (_rateMonitor.CurrentRate > _maximumRequestRate)
                {
                    var delay = _rateMonitor.RecommendDelay(_maximumRequestRate);
                    var timer = new DispatcherTimer
                    {
                        Interval = delay
                    };

                    EventHandler tickHandler = null;
                    tickHandler = (s, e) =>
                    {
                        timer.Tick -= tickHandler;
                        timer.Stop();
                        downloadRequest.MediaTrack.TrackInfo.BeginGetChunk(
                            downloadRequest.ChunkTimestamp, BeginGetChunk_Completed,
                            downloadRequest);
                    };
                    timer.Tick += tickHandler;
                    timer.Start();
                }
                else
                {
                    downloadRequest.MediaTrack.TrackInfo.BeginGetChunk(downloadRequest.ChunkTimestamp, BeginGetChunk_Completed, downloadRequest);
                }
            }
        }
Exemplo n.º 2
0
        protected override void OnRequestExceededMaximumRetryAttempts(RetryQueueRequest request)
        {
            base.OnRequestExceededMaximumRetryAttempts(request);

            var streamSelectionRequest = request as IStreamSelectionRequest;

            if (StreamSelectionExceededMaximumRetries != null && streamSelectionRequest != null)
            {
                StreamSelectionExceededMaximumRetries(this, streamSelectionRequest.Segment, streamSelectionRequest.Streams);
            }
        }
Exemplo n.º 3
0
        protected override void OnRetryingRequest(RetryQueueRequest request)
        {
            base.OnRetryingRequest(request);

            var streamSelectionRequest = request as IStreamSelectionRequest;

            if (RetryingStreamSelection != null && streamSelectionRequest != null)
            {
                RetryingStreamSelection(this, streamSelectionRequest.Segment, streamSelectionRequest.Streams);
            }
        }
Exemplo n.º 4
0
        protected override void CancelRequest(RetryQueueRequest request)
        {
            base.CancelRequest(request);

            var offlineTask = request as OfflineTask;

            if (offlineTask != null && offlineTask.DownloadWebClient != null)
            {
                offlineTask.DownloadWebClient.CancelAsync();
            }
        }
        protected override void OnRetryingRequest(RetryQueueRequest request)
        {
            base.OnRetryingRequest(request);

            var downloadRequest = request as DownloadRequest;

            if (RetryingDownload != null && downloadRequest != null)
            {
                RetryingDownload(this, downloadRequest.MediaTrack, downloadRequest.ChunkTimestamp);
            }
        }
        protected override void OnRequestExceededMaximumRetryAttempts(RetryQueueRequest request)
        {
            base.OnRequestExceededMaximumRetryAttempts(request);

            var downloadRequest = request as DownloadRequest;

            if (DownloadExceededMaximumRetries != null && downloadRequest != null)
            {
                DownloadExceededMaximumRetries(this, downloadRequest.MediaTrack, downloadRequest.ChunkTimestamp);
            }
        }
Exemplo n.º 7
0
        protected override void BeginRequest(RetryQueueRequest request)
        {
            var offlineTask = request as OfflineTask;

            if (offlineTask != null)
            {
                switch (offlineTask.Type)
                {
                case OfflineTaskType.DownloadFile:
                    BeginDownloadFile(offlineTask);
                    break;

                case OfflineTaskType.ProcessManifest:
                    break;

                case OfflineTaskType.QueueChunkList:
                    break;

                default:
                    break;
                }
            }
        }
Exemplo n.º 8
0
        protected override void BeginRequest(RetryQueueRequest request)
        {
            //Adding an intentional delay here to work around a known timing issue
            //with the SSME.  If this is called too soon after initialization the
            //request will be aborted with no indication raised from the SSME.
            //TODO: Remove this workaround once the SSME has been fixed.
            DispatcherTimer timer = new DispatcherTimer();

            timer.Interval = TimeSpan.FromMilliseconds(250);
            EventHandler tickHandler = null;

            tickHandler = (s, e) =>
            {
                Segment           segment  = null;
                List <StreamInfo> streams  = null;
                var streamSelectionRequest = request as StreamSelectionRequest;
                if (streamSelectionRequest != null)
                {
                    streams = streamSelectionRequest.Streams.Select(i => i.StreamInfo).ToList();
                    segment = streamSelectionRequest.Segment;
                }
                else
                {
                    var streamModifyRequest = request as StreamModifyRequest;
                    if (streamModifyRequest != null)
                    {
                        streams = streamModifyRequest.Streams.Select(i => i.StreamInfo).ToList();
                        segment = streamModifyRequest.Segment;
                    }
                }
                segment.SegmentInfo.SelectStreamsAsync(streams, request);
                timer.Tick -= tickHandler;
                timer.Stop();
            };
            timer.Tick += tickHandler;
            timer.Start();
        }