Example #1
0
 /// <summary>
 /// The optional next step to run
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 protected async Task Next(ISequenceContext context)
 {
     if (NextStep != null)
     {
         await NextStep.RunAsync(context);
     }
 }
Example #2
0
        public override void PreProcess(CancellationTokenSource cancellationTokenSource = null)
        {
            if (cancellationTokenSource != null)
            {
                CancellationTknSource = cancellationTokenSource;
            }

            try
            {
                if (_sequenceContext == null || SequenceChanged() || _sequence == null)
                {
                    if (_sequenceContext != null)
                    {
                        DisposeCurrentContext();
                    }

                    var entry = SequenceManager.GetSequenceAsync(ShowItem.SequencePath);
                    entry.Wait();
                    var sequenceEntry = entry.Result;

                    if (sequenceEntry == null)
                    {
                        Logging.Error("Failed to preprocess sequence {1} because it could not be loaded.", ShowItem.Name);
                        return;
                    }

                    //Give up to 30 seconds for the sequence to load.
                    int retryCount = 0;
                    while (sequenceEntry.SequenceLoading && retryCount < 30)
                    {
                        retryCount++;
                        Logging.Info("Waiting for sequence to load. {1}", ShowItem.Name);
                        Thread.Sleep(1);
                    }

                    if (sequenceEntry.Sequence == null)
                    {
                        Logging.Error("Failed to preprocess sequence {1} because it could not be loaded.", ShowItem.Name);
                        return;
                    }
                    _sequence = sequenceEntry.Sequence;

                    //Initialize the media if we have it so any audio effects can be rendered
                    LoadMedia();

                    ISequenceContext context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), _sequence);

                    Parallel.ForEach(_sequence.SequenceData.EffectData.Cast <IEffectNode>(), RenderEffect);

                    context.SequenceEnded += sequence_Ended;

                    _sequenceContext = context;
                }
                PreProcessingCompleted = true;
            }
            catch (Exception ex)
            {
                Logging.Error("Could not pre-render sequence " + ShowItem.SequencePath + "; ", ex);
            }
        }
Example #3
0
        private void _Execute(TimeSpan startTime, TimeSpan endTime)
        {
            _CommitChanges();

            Cursor = Cursors.WaitCursor;
            try {
                listBoxRuntimeErrors.Items.Clear();

                _context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), Sequence);
                if (_context == null)
                {
                    MessageBox.Show(this, "Unable to play this sequence.  See error log for details.", "Script Editor",
                                    MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    return;
                }
                _context.SequenceEnded += _context_SequenceEnded;
                _context.Message       += _context_Message;
                _context.Error         += _context_Error;
                _context.Play(startTime, endTime);
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }
            finally {
                Cursor = Cursors.Default;
            }
        }
Example #4
0
 private void _context_SequenceEnded(object sender, SequenceEventArgs e)
 {
     _context.Error         -= _context_Error;
     _context.Message       -= _context_Message;
     _context.SequenceEnded -= _context_SequenceEnded;
     VixenSystem.Contexts.ReleaseContext(_context);
     _context = null;
 }
Example #5
0
        public override async Task RunAsync(ISequenceContext context)
        {
            await _asyncFunc(context, async sequenceContext =>
            {
                await Next(sequenceContext);
            });

            await Task.FromResult(0);
        }
Example #6
0
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         DisposeCurrentContext();
     }
     _sequence        = null;
     _sequenceContext = null;
     base.Dispose(disposing);
 }
Example #7
0
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         DisposeCurrentContext();
     }
     SequenceManager.ConsumerFinished(ShowItem.SequencePath);
     _sequenceContext = null;
     base.Dispose(disposing);
 }
Example #8
0
        /// <summary>
        /// Play a sequence of a given file name.
        /// </summary>
        /// <param name="sequence"></param>
        /// <returns></returns>
        public static ContextStatus PlaySequence(Sequence sequence)
        {
            var status = new ContextStatus();

            if (sequence == null)
            {
                throw new ArgumentNullException("sequence");
            }

            IEnumerable <IContext> contexts = VixenSystem.Contexts.Where(x => x.Name.Equals(sequence.Name) && (x.IsRunning || x.IsPaused));

            if (contexts.Any(x => x.IsPaused))
            {
                foreach (var context in contexts)
                {
                    if (context.IsPaused)
                    {
                        context.Resume();
                    }
                }
                status.Message = string.Format("Resumed {0}", sequence.Name);
            }
            else
            {
                string fileName = HttpUtility.UrlDecode(sequence.FileName);

                ISequence seq = SequenceService.Instance.Load(fileName);
                if (seq != null)
                {
                    Logging.Info(string.Format("Web - Prerendering effects for sequence: {0}", sequence.Name));
                    Parallel.ForEach(seq.SequenceData.EffectData.Cast <IEffectNode>(), effectNode => effectNode.Effect.PreRender());

                    ISequenceContext context = VixenSystem.Contexts.CreateSequenceContext(
                        new ContextFeatures(ContextCaching.NoCaching), seq);
                    context.ContextEnded += context_ContextEnded;
                    context.Play(TimeSpan.Zero, seq.Length);
                    status.State    = ContextStatus.States.Playing;
                    status.Sequence = new Sequence()
                    {
                        Name     = context.Sequence.Name,
                        FileName = fileName
                    };

                    status.Message = string.Format("Playing sequence {0} of length {1}", sequence.Name, seq.Length);
                }
                else
                {
                    status.Message = string.Format("Sequence {0} not found.", fileName);
                }
            }


            return(status);
        }
Example #9
0
        private void DisposeCurrentContext()
        {
            _sequenceContext.SequenceEnded -= sequence_Ended;
            VixenSystem.Contexts.ReleaseContext(_sequenceContext);
            _sequenceContext.Dispose();
            TimedSequence tSequence = (sequence as TimedSequence);

            tSequence.Dispose();
            sequence         = null;
            _sequenceContext = null;
        }
Example #10
0
        public ISequenceContext CreateSequenceContext(ContextFeatures contextFeatures, ISequence sequence)
        {
            ISequenceExecutor executor = Vixen.Services.SequenceTypeService.Instance.CreateSequenceExecutor(sequence);
            ISequenceContext  context  = (ISequenceContext)_CreateContext(ContextTargetType.Sequence, contextFeatures);

            if (executor != null && context != null)
            {
                context.Executor = executor;
                context.Sequence = sequence;
                _AddContext(context);
            }
            return(context);
        }
Example #11
0
        public ISequenceContext CreateSequenceContext(ContextFeatures contextFeatures, ISequence sequence)
        {
            ISequenceExecutor executor = Vixen.Services.SequenceTypeService.Instance.CreateSequenceExecutor(sequence);
            ISequenceContext  context  = (ISequenceContext)_CreateContext(ContextTargetType.Sequence, contextFeatures);

            if (executor != null && context != null)
            {
                context.Executor = executor;
                context.Sequence = sequence;
                _AddContext(context);
            }
            VixenSystem.Instrumentation.AddValue(_contextUpdateTimeValue);
            return(context);
        }
Example #12
0
        public override void PreProcess(CancellationTokenSource cancellationTokenSource = null)
        {
            if (cancellationTokenSource != null)
            {
                CancellationTknSource = cancellationTokenSource;
            }

            try
            {
                //Console.WriteLine("PreProcess: " + ShowItem.Name + " : " + (_sequenceContext == null));
                if (_sequenceContext == null || SequenceChanged())
                {
                    if (_sequenceContext != null)
                    {
                        DisposeCurrentContext();
                    }

                    _sequence = SequenceService.Instance.Load(ShowItem.Sequence_FileName);

                    //Initialize the media if we have it so any audio effects can be rendered
                    LoadMedia();
                    // Why doesn't this work?
                    //IContext context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.ContextLevelCaching), sequence);
                    ISequenceContext context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), _sequence);

                    // Parallel doesn't work here. Causes multiple sequences to be run at the same time
                    //foreach (IEffectNode effectNode in sequence.SequenceData.EffectData.Cast<IEffectNode>())
                    Parallel.ForEach(_sequence.SequenceData.EffectData.Cast <IEffectNode>(), RenderEffect);

                    context.SequenceEnded += sequence_Ended;

                    _sequenceContext = context;
                }
                PreProcessingCompleted = true;
            }
            catch (Exception ex)
            {
                Logging.ErrorException("Could not pre-render sequence " + ShowItem.Sequence_FileName + "; ", ex);
            }
        }
        private void PlaySequence(HttpRequestHead request, IHttpResponseDelegate response)
        {
            HttpResponseHead headers;
            var status = new Status();
            NameValueCollection parms = GetParameters(request);

            if (!parms.HasKeys() && parms["name"] != null)
            {
                headers = GetHeaders(0, HttpStatusCode.BadRequest.ToString());
                response.OnResponse(headers, new BufferedProducer(""));
                return;
            }

            string fileName = HttpUtility.UrlDecode(parms["name"]);

            if (_context != null && (_context.IsRunning))
            {
                status.Message = string.Format("Already playing {0}", _context.Sequence.Name);
            }
            else
            {
                ISequence sequence = SequenceService.Instance.Load(fileName);
                if (sequence == null)
                {
                    headers        = GetOkHeaders(0);
                    headers.Status = HttpStatusCode.NotFound.ToString();
                    response.OnResponse(headers, new BufferedProducer(""));
                    return;
                }
                Logging.Info(string.Format("Web - Prerendering effects for sequence: {0}", sequence.Name));
                Parallel.ForEach(sequence.SequenceData.EffectData.Cast <IEffectNode>(), effectNode => effectNode.Effect.PreRender());

                _context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), sequence);
                _context.ContextEnded += context_ContextEnded;
                _context.Play(TimeSpan.Zero, sequence.Length);
                status.Message = string.Format("Playing sequence {0} of length {1}", sequence.Name, sequence.Length);
            }

            SerializeResponse(status, response);
        }
Example #14
0
            public override async Task RunAsync(ISequenceContext context)
            {
                context.Data.Add(_key, _value);

                await Next(context);
            }
Example #15
0
        public override void PreProcess(CancellationTokenSource cancellationTokenSource = null)
        {
            if (cancellationTokenSource != null)
                CancellationTknSource = cancellationTokenSource;

            try
            {
                //Console.WriteLine("PreProcess: " + ShowItem.Name + " : " + (_sequenceContext == null));
                if (_sequenceContext == null || SequenceChanged())
                {
                    if (_sequenceContext != null)
                    {
                        DisposeCurrentContext();
                    }

                    sequence = SequenceService.Instance.Load(ShowItem.Sequence_FileName);
                    // Why doesn't this work?
                    //IContext context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.ContextLevelCaching), sequence);
                    ISequenceContext context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), sequence);

                    // Parallel doesn't work here. Causes multiple sequences to be run at the same time
                    //foreach (IEffectNode effectNode in sequence.SequenceData.EffectData.Cast<IEffectNode>())
                    Parallel.ForEach(sequence.SequenceData.EffectData.Cast<IEffectNode>(), effectNode => effectNode.Effect.PreRender());

                    context.SequenceEnded += sequence_Ended;

                    _sequenceContext = context;
                }
                PreProcessingCompleted = true;
            }
            catch (Exception ex)
            {
                Logging.Error("Could not pre-render sequence " + ShowItem.Sequence_FileName + "; " + ex.Message);
            }
        }
Example #16
0
 private void DisposeCurrentContext()
 {
     _sequenceContext.SequenceEnded -= sequence_Ended;
     VixenSystem.Contexts.ReleaseContext(_sequenceContext);
     _sequenceContext.Dispose();
     TimedSequence tSequence = (sequence as TimedSequence);
     tSequence.Dispose();
     sequence = null;
     _sequenceContext = null;
 }
Example #17
0
        private void OpenSequenceContext(ISequence sequence)
        {
            if (_context != null)
            {
                CloseSequenceContext();
            }
            //_context = (ProgramContext)VixenSystem.Contexts.CreateContext(Sequence);
            //_context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.ContextLevelCaching), Sequence);
            _context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), Sequence);
            if (_context == null)
            {
                Logging.Error(@"Null context when attempting to play sequence.");
                MessageBox.Show(@"Unable to play this sequence.  See error log for details.");
                return;
            }
            TimelineControl.grid.Context = _context;
            _context.SequenceStarted += context_SequenceStarted;
            _context.SequenceEnded += context_SequenceEnded;
            //_context.ProgramEnded += _context_ProgramEnded;
            _context.ContextEnded += context_ContextEnded;

            updateButtonStates();
        }
Example #18
0
 private void OnExecutionStateChanged(object sender, EventArgs e)
 {
     Console.WriteLine("tse: state changed: " + Execution.State);
     if (Execution.State.Equals("Closing"))
     {
         if (_context != null)
             CloseSequenceContext();
         _context = null;
     }
     else if (Execution.State.Equals("Open"))
     {
         OpenSequenceContext(_sequence);
     }
 }
Example #19
0
        private void _Execute(TimeSpan startTime, TimeSpan endTime)
        {
            _CommitChanges();

            Cursor = Cursors.WaitCursor;
            try {
                listBoxRuntimeErrors.Items.Clear();

                _context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), Sequence);
                if (_context == null) {
                    MessageBox.Show(this, "Unable to play this sequence.  See error log for details.", "Script Editor",
                                    MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    return;
                }
                _context.SequenceEnded += _context_SequenceEnded;
                _context.Message += _context_Message;
                _context.Error += _context_Error;
                _context.Play(startTime, endTime);
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }
            finally {
                Cursor = Cursors.Default;
            }
        }
Example #20
0
 private void _context_SequenceEnded(object sender, SequenceEventArgs e)
 {
     _context.Error -= _context_Error;
     _context.Message -= _context_Message;
     _context.SequenceEnded -= _context_SequenceEnded;
     VixenSystem.Contexts.ReleaseContext(_context);
     _context = null;
 }
Example #21
0
        private void OpenSequenceContext(ISequence sequence)
        {
            if (_context != null)
            {
                CloseSequenceContext();
            }
            //_context = (ProgramContext)VixenSystem.Contexts.CreateContext(Sequence);
            //_context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.ContextLevelCaching), Sequence);
            _context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), Sequence);
            if (_context == null)
            {
                Logging.Error(@"TimedSequenceEditor: <OpenSequenceContext> - null _context when attempting to play sequence!");
                //messageBox Arguments are (Text, Title, No Button Visible, Cancel Button Visible)
                MessageBoxForm.msgIcon = SystemIcons.Error; //this is used if you want to add a system icon to the message form.
                var messageBox = new MessageBoxForm("Unable to play this sequence.  See error log for details.", @"Unable to Play", false, false);
                messageBox.ShowDialog();
                return;
            }
            TimelineControl.grid.Context = _context;
            _context.SequenceStarted += context_SequenceStarted;
            _context.SequenceEnded += context_SequenceEnded;
            //_context.ProgramEnded += _context_ProgramEnded;
            _context.ContextEnded += context_ContextEnded;

            UpdateButtonStates();
        }
Example #22
0
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                DisposeCurrentContext();

            }
            SequenceManager.ConsumerFinished(ShowItem.Sequence_FileName);
            _sequenceContext = null;
            base.Dispose(disposing);
        }
Example #23
0
 internal Sequence(ISequenceReader stepReader, ISequenceContext context)
 {
     _stepReader = stepReader;
     _context    = context;
 }
Example #24
0
 public override async Task RunAsync(ISequenceContext context)
 {
     await Next(context);
 }
Example #25
0
 /// <summary>
 /// Run an individual step.
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 public abstract Task RunAsync(ISequenceContext context);
Example #26
0
		protected override void Dispose(bool disposing)
		{
			if (disposing)
			{
				DisposeCurrentContext();
				
			}
			sequence = null;
			_sequenceContext = null;
			base.Dispose(disposing);
		}
Example #27
0
            public override async Task RunAsync(ISequenceContext context)
            {
                await Task.FromResult(0);

                throw new InvalidOperationException();
            }
        private void OpenSequenceContext(Vixen.Sys.ISequence sequence)
        {
            if(_context != null) {
                CloseSequenceContext();
            }
            //_context = (ProgramContext)VixenSystem.Contexts.CreateContext(Sequence);
            _context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.ContextLevelCaching), Sequence);
            if(_context == null) {
                MessageBox.Show("Unable to play this sequence.  See error log for details.");
                return;
            }
            _context.SequenceStarted += context_SequenceStarted;
            _context.SequenceEnded += context_SequenceEnded;
            //_context.ProgramEnded += _context_ProgramEnded;
            _context.ContextEnded += context_ContextEnded;

            updateButtonStates();
        }
Example #29
0
        public override void PreProcess(CancellationTokenSource cancellationTokenSource = null)
        {
            if (cancellationTokenSource != null)
                CancellationTknSource = cancellationTokenSource;

            try
            {
                if (_sequenceContext == null || SequenceChanged() || _sequence == null)
                {
                    if (_sequenceContext != null)
                    {
                        DisposeCurrentContext();
                    }

                    var entry = SequenceManager.GetSequenceAsync(ShowItem.Sequence_FileName);
                    entry.Wait();
                    var sequenceEntry = entry.Result;

                    if (sequenceEntry == null)
                    {
                        Logging.Error("Failed to preprocess sequence {1} because it could not be loaded.", ShowItem.Name);
                        return;
                    }

                    //Give up to 30 seconds for the sequence to load.
                    int retryCount = 0;
                    while (sequenceEntry.SequenceLoading && retryCount<30)
                    {
                        retryCount++;
                        Logging.Info("Waiting for sequence to load. {1}", ShowItem.Name);
                        Thread.Sleep(1);
                    }

                    if (sequenceEntry.Sequence == null)
                    {
                        Logging.Error("Failed to preprocess sequence {1} because it could not be loaded.", ShowItem.Name);
                        return;
                    }
                    _sequence = sequenceEntry.Sequence;

                    //Initialize the media if we have it so any audio effects can be rendered
                    LoadMedia();

                    ISequenceContext context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), _sequence);

                    Parallel.ForEach(_sequence.SequenceData.EffectData.Cast<IEffectNode>(), RenderEffect);

                    context.SequenceEnded += sequence_Ended;

                    _sequenceContext = context;
                }
                PreProcessingCompleted = true;
            }
            catch (Exception ex)
            {
                Logging.Error("Could not pre-render sequence " + ShowItem.Sequence_FileName + "; ",ex);
            }
        }
Example #30
0
        private void PlaySequence(HttpRequestHead request, IHttpResponseDelegate response)
        {
            HttpResponseHead headers;
            var status = new Status();
            NameValueCollection parms = GetParameters(request);

            if(!parms.HasKeys() && parms["name"] != null)
            {
                headers = GetHeaders(0, HttpStatusCode.BadRequest.ToString());
                response.OnResponse(headers,new BufferedProducer(""));
                return;
            }

            string fileName = HttpUtility.UrlDecode(parms["name"]);
            if (_context != null && (_context.IsRunning))
            {
                status.Message = string.Format("Already playing {0}", _context.Sequence.Name);
            }
            else
            {
                ISequence sequence = SequenceService.Instance.Load(fileName);
                if (sequence == null)
                {
                    headers = GetOkHeaders(0);
                    headers.Status = HttpStatusCode.NotFound.ToString();
                    response.OnResponse(headers, new BufferedProducer(""));
                    return;
                }
                Logging.Info(string.Format("Web - Prerendering effects for sequence: {0}", sequence.Name));
                Parallel.ForEach(sequence.SequenceData.EffectData.Cast<IEffectNode>(), effectNode  => effectNode.Effect.PreRender());

                _context = VixenSystem.Contexts.CreateSequenceContext(new ContextFeatures(ContextCaching.NoCaching), sequence);
                _context.ContextEnded += context_ContextEnded;
                _context.Play(TimeSpan.Zero, sequence.Length);
                status.Message = string.Format("Playing sequence {0} of length {1}", sequence.Name, sequence.Length);
            }

            SerializeResponse(status,response);
        }