Sic.Framework-Nanjing-Baishi/MECF.Framework.Common/Aitex/Core/RT/Routine/QueueRoutine.cs

60 lines
1005 B
C#

using System.Collections.Generic;
namespace Aitex.Core.RT.Routine
{
public class QueueRoutine
{
private Queue<IRoutine> _steps = new Queue<IRoutine>();
private IRoutine _currentStep = null;
public void Add(IRoutine step)
{
_steps.Enqueue(step);
}
public void Reset()
{
_steps.Clear();
_currentStep = null;
}
public void Abort()
{
if (_currentStep != null)
{
_currentStep.Abort();
}
Reset();
}
public Result Start(params object[] objs)
{
if (_steps.Count == 0)
{
return Result.DONE;
}
_currentStep = _steps.Dequeue();
return _currentStep.Start(objs);
}
public Result Monitor(params object[] objs)
{
Result result = Result.FAIL;
if (_currentStep != null)
{
result = _currentStep.Monitor();
}
if (result == Result.DONE)
{
_currentStep = ((_steps.Count > 0) ? _steps.Dequeue() : null);
if (_currentStep != null)
{
return _currentStep.Start(objs);
}
}
return result;
}
}
}