internal async Task PlayAdAsync(IAdSource adSource, TimeSpan?startTimeout, CancellationToken cancellationToken, IProgress <AdStatus> progress)
#endif
        {
            if (!(adSource.Payload is AdDocumentPayload))
            {
                throw new ArgumentException("adSource must contain a payload of type AdDocumentPayload", "adPayload");
            }
            var adDoc = (AdDocumentPayload)adSource.Payload;

            // do an extra check to catch an empty payload before we get any further.
            if (adDoc.AdPods.Count == 0)
            {
                VpaidController.TrackErrorUrl(adDoc.Error, Microsoft.Media.Advertising.VpaidController.Error_NoAd);
                var playExection = new PlayException(new LoadException(new Exception("No ads found.")));
                LogError(adSource, playExection);
                throw playExection;
            }

            // create a new token that we can cancel independently
            var masterCancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
            var playTasks = PlayAdAsync(adDoc, adSource, startTimeout, masterCancellationToken.Token, progress);

            try
            {
                activeOperation = new ActiveOperation(playTasks.Secondary, masterCancellationToken);
                await playTasks.Primary;
            }
            catch (PlayException)
            {
                activeOperation = null;
                throw;
            }
        }
        public PlayException Create(PlayException playException)
        {
            var playExceptions = ReadAll();

            if (playExceptions.Any())
            {
                playException.Id = playExceptions.Select(x => x.Id).Max() + 1;
            }
            else
            {
                playException.Id = 1;
            }
            playExceptions.Add(playException);
            WriteAll(playExceptions);
            return(playException);
        }
Exemplo n.º 3
0
 public ActionResult Create(IFormCollection collection)
 {
     try
     {
         var model = new PlayException();
         model.Start    = DateTime.Parse(collection["Start"]);
         model.Duration = int.Parse(collection["Duration"]);
         model.Reason   = collection["Reason"];
         repository.Create(model);
         return(RedirectToAction(nameof(Index)));
     }
     catch
     {
         return(View());
     }
 }
        public void Update(PlayException playException)
        {
            var playExceptions    = ReadAll();
            var listPlayException = playExceptions.FirstOrDefault(x => x.Id == playException.Id);

            if (listPlayException != null)
            {
                listPlayException.Start    = playException.Start;
                listPlayException.Duration = playException.Duration;
                listPlayException.Reason   = playException.Reason;
                WriteAll(playExceptions);
            }
            else
            {
                throw new ArgumentException(nameof(playException));
            }
        }
        internal async Task PlayAdAsync(IAdSource adSource, TimeSpan? startTimeout, CancellationToken cancellationToken, IProgress<AdStatus> progress)
#endif
        {
            if (!(adSource.Payload is AdDocumentPayload)) throw new ArgumentException("adSource must contain a payload of type AdDocumentPayload", "adPayload");
            var adDoc = (AdDocumentPayload)adSource.Payload;
            
            // do an extra check to catch an empty payload before we get any further.
            if (adDoc.AdPods.Count == 0)
            {
                VpaidController.TrackErrorUrl(adDoc.Error, Microsoft.Media.Advertising.VpaidController.Error_NoAd);
                var playExection = new PlayException(new LoadException(new Exception("No ads found.")));
                LogError(adSource, playExection);
                throw playExection;
            }

            // create a new token that we can cancel independently
            var masterCancellationToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
            var playTasks = PlayAdAsync(adDoc, adSource, startTimeout, masterCancellationToken.Token, progress);
            try
            {
                activeOperation = new ActiveOperation(playTasks.Secondary, masterCancellationToken);
                await playTasks.Primary;
            }
            catch (PlayException)
            {
                activeOperation = null;
                throw;
            }
        }