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++; } } }
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++; } } }
public void Execute(SequenceExecutionContext context) { try { _currentContext = context; _sender.Send(); } finally { _currentContext = null; } }
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); } } }
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); } }
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); } } }
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); } } }