public void ExecuteNextStep(SequenceExecutionContext executionContext)
        {
            if (Trigger.TestExpectationIfAnyMessageOnQueue(executionContext))
            {
                _currentSequenceExecutions.Add(_sequence.Root);
            }

            var currentSteps = new List<IStep>(_currentSequenceExecutions);

            foreach (var currentStep in currentSteps)
            {
                currentStep.Execute(executionContext);
            }

            int index = 0;

            foreach (var currentStep in currentSteps)
            {
                IStep next = _sequence.GetStepAfter(currentStep);

                if (next != null)
                    _currentSequenceExecutions[index] = next;
                else
                    _currentSequenceExecutions.RemoveAt(index--);

                index++;
            }
        }
        public void ExecuteNextStep(SequenceExecutionContext executionContext)
        {
            List<KeyValuePair<IStep, IMessageInitializerParameterBinder>> currentStepsSnapshot;
            lock (_currentSequenceExecutionsLock)
            {
                currentStepsSnapshot = new List<KeyValuePair<IStep, IMessageInitializerParameterBinder>>(_currentSequenceExecutions);
            }

            foreach (var currentStep in currentStepsSnapshot)
            {
                executionContext.CapturedInput = currentStep.Value;
                currentStep.Key.Execute(executionContext);
            }

            lock(_currentSequenceExecutionsLock)
            {
                int index = 0;

                foreach (var currentStep in currentStepsSnapshot)
                {
                    IStep next = _sequenceOfEvents.GetStepAfter(currentStep.Key);

                    if (next != null)
                        _currentSequenceExecutions[index] = new KeyValuePair<IStep, IMessageInitializerParameterBinder>(next, _currentSequenceExecutions[index].Value);
                    else
                        _currentSequenceExecutions.Remove(currentStep);
                    index++;
                }

            }
        }
Beispiel #3
0
        public void ExecuteNextStep(SequenceExecutionContext executionContext)
        {
            if (Trigger.TestExpectationIfAnyMessageOnQueue(executionContext))
            {
                _currentSequenceExecutions.Add(_sequence.Root);
            }

            var currentSteps = new List <IStep>(_currentSequenceExecutions);

            foreach (var currentStep in currentSteps)
            {
                currentStep.Execute(executionContext);
            }

            int index = 0;

            foreach (var currentStep in currentSteps)
            {
                IStep next = _sequence.GetStepAfter(currentStep);

                if (next != null)
                {
                    _currentSequenceExecutions[index] = next;
                }
                else
                {
                    _currentSequenceExecutions.RemoveAt(index--);
                }

                index++;
            }
        }
        public void ExecuteNextStep(SequenceExecutionContext executionContext)
        {
            List <KeyValuePair <IStep, IMessageInitializerParameterBinder> > currentStepsSnapshot;

            lock (_currentSequenceExecutionsLock)
            {
                currentStepsSnapshot = new List <KeyValuePair <IStep, IMessageInitializerParameterBinder> >(_currentSequenceExecutions);
            }

            foreach (var currentStep in currentStepsSnapshot)
            {
                executionContext.CapturedInput = currentStep.Value;
                currentStep.Key.Execute(executionContext);
            }

            lock (_currentSequenceExecutionsLock)
            {
                int index = 0;

                foreach (var currentStep in currentStepsSnapshot)
                {
                    IStep next = _sequenceOfEvents.GetStepAfter(currentStep.Key);

                    if (next != null)
                    {
                        _currentSequenceExecutions[index] = new KeyValuePair <IStep, IMessageInitializerParameterBinder>(next, _currentSequenceExecutions[index].Value);
                    }
                    else
                    {
                        _currentSequenceExecutions.Remove(currentStep);
                    }
                    index++;
                }
            }
        }
Beispiel #5
0
 public void Execute(SequenceExecutionContext context)
 {
     try
     {
         _currentContext = context;
         _sender.Send();
     }
     finally
     {
         _currentContext = null;
     }
 }
Beispiel #6
0
        private void RunInternal()
        {
            var executingSequences = new List <IMessageSequence>();

            executingSequences.AddRange(Sequences);
            var executionContext = new SequenceExecutionContext(executingSequences, Queue, MessagePicker);

            IList <IMessageSequence> doneSequences = new List <IMessageSequence>();

            while (executingSequences.Count > 0 && !(RequestedStop && !executingSequences.Any(sequence => sequence is INonRepeatingMessageSequence)))
            {
                ExecuteAStepAndCheckIfAnySequencesAreDone(doneSequences, executingSequences, executionContext);

                foreach (IMessageSequence messageSequence in doneSequences)
                {
                    executingSequences.Remove(messageSequence);
                }
            }
        }
Beispiel #7
0
        private static void ExecuteAStepAndCheckIfAnySequencesAreDone(IList<IMessageSequence> doneSequences, List<IMessageSequence> executingSequences, SequenceExecutionContext executionContext)
        {
            doneSequences.Clear();

            foreach (IMessageSequence sequence in executingSequences)
            {
                sequence.ExecuteNextStep(executionContext);

                var nonRepeatingSequence = sequence as INonRepeatingMessageSequence;

                if (nonRepeatingSequence != null && nonRepeatingSequence.Done)
                    doneSequences.Add(sequence);
            }
        }
Beispiel #8
0
        private void RunInternal()
        {
            var executingSequences = new List<IMessageSequence>();
            executingSequences.AddRange(Sequences);
            var executionContext = new SequenceExecutionContext(executingSequences, Queue, MessagePicker);

            IList<IMessageSequence> doneSequences = new List<IMessageSequence>();

            while (executingSequences.Count > 0 && !(RequestedStop && !executingSequences.Any(sequence => sequence is INonRepeatingMessageSequence)))
            {
                ExecuteAStepAndCheckIfAnySequencesAreDone(doneSequences, executingSequences, executionContext);

                foreach (IMessageSequence messageSequence in doneSequences)
                {
                    executingSequences.Remove(messageSequence);
                }
            }
        }
Beispiel #9
0
        private static void ExecuteAStepAndCheckIfAnySequencesAreDone(IList <IMessageSequence> doneSequences, List <IMessageSequence> executingSequences, SequenceExecutionContext executionContext)
        {
            doneSequences.Clear();

            foreach (IMessageSequence sequence in executingSequences)
            {
                sequence.ExecuteNextStep(executionContext);

                var nonRepeatingSequence = sequence as INonRepeatingMessageSequence;

                if (nonRepeatingSequence != null && nonRepeatingSequence.Done)
                {
                    doneSequences.Add(sequence);
                }
            }
        }