RunStepInfo.cs 1.9 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary.bean
{
    public class RunStepInfo
    {

        public IStep Step;
        public IStep S1;
        public IStep S2;
        public IStep S3_Out;
        public IStep S3_Empty;
        public IStep S4;
        private object runLocObj = new object();
        private object isFinishLocObj = new object();
        public RunStepInfo()
        {
            S1 = new S1_None(this);
            S2 = new S2_CheckTarLine(this);
            S3_Empty = new S3_ToEmptyLine(this);
            S3_Out = new S3_ToOutLine(this);
            S4 = new S4_Finish(this);
            Step=S1;
        }
        public bool IsStep(IStep step)
        {
            return Step.Equals(step);
        }
        public void Execute()
        {
            if(Monitor.TryEnter(runLocObj))
            {
                try
                {                   
                    Step.Run();
                }
                catch(Exception ex)
                {
                    Common.LogUtil.error("RunStepInfo", ex);
                }
                finally
                {
                    Monitor.Exit(runLocObj);
                }
            }

        }
        public bool IsFinished()
        {
            if (Monitor.TryEnter(isFinishLocObj))
            {
                bool finish = false;
                try
                {
                    Step.Execute();
                    finish = Step.IsFinished();
                }
                catch (Exception ex)
                {
                    Common.LogUtil.error("IsFinished", ex);
                }
                finally
                {
                    Monitor.Exit(isFinishLocObj);
                }
                return finish;
            }
            else
                return false;
        }
    }
}