Beispiel #1
0
 public AutomationUnit(IAutomation automation, AutomationContext context, DelegateAutomationDone callback, object stateObject, AutomationUnit callingUnit)
 {
     _automation          = automation;
     _context             = context;
     _callback            = callback;
     _callbackStateObject = stateObject;
     _callingUnit         = callingUnit;
 }
Beispiel #2
0
        void NotifyWaitUnit(IAutomation automation, AutomationUnit callingUnit)
        {
            if (callingUnit != null)
            {
                int index = _waitForCompleteList.IndexOf(callingUnit);
                if (index >= 0 && index < _waitForCompleteList.Count)
                {
                    AutomationUnit waitUnit       = _waitForCompleteList[index] as AutomationUnit;
                    IAutomation    waitAutomation = waitUnit.Automation;
                    if (waitAutomation.Success == automation)
                    {
                        waitAutomation.Success = null;
                    }
                    else if (waitAutomation.Failure == automation)
                    {
                        waitAutomation.Failure = null;
                    }
                    else if (waitAutomation.Complete == automation)
                    {
                        waitAutomation.Complete = null;
                    }

                    switch (waitAutomation.Result)
                    {
                    case AutomationResult.Success:
                        if (waitAutomation.Success == null && waitAutomation.Complete == null)
                        {
                            if (waitUnit.Callback != null)
                            {
                                waitUnit.Callback.Invoke(waitUnit.CallbackStateObject);
                            }

                            if (waitUnit.CallingUnit != null)
                            {
                                NotifyWaitUnit(waitAutomation, waitUnit.CallingUnit);
                            }

                            _waitForCompleteList.Remove(waitUnit);
                        }
                        break;

                    case AutomationResult.Failure:
                        if (waitAutomation.Failure == null && waitAutomation.Complete == null)
                        {
                            if (waitUnit.Callback != null)
                            {
                                waitUnit.Callback.Invoke(waitUnit.CallbackStateObject);
                            }

                            if (waitUnit.CallingUnit != null)
                            {
                                NotifyWaitUnit(waitAutomation, waitUnit.CallingUnit);
                            }

                            _waitForCompleteList.Remove(waitUnit);
                        }
                        break;
                    }
                }
            }
        }
Beispiel #3
0
 /// <summary>
 /// 等待后续完成
 /// </summary>
 /// <param name="automationUnit"></param>
 private void WaitForComplete(AutomationUnit automationUnit)
 {
     _toBeWaitList.Add(automationUnit);
 }
Beispiel #4
0
 /// <summary>
 /// 删除自动化作业
 /// </summary>
 private void Remove(AutomationUnit automationUnit)
 {
     _toBeDelList.Add(automationUnit);
 }
Beispiel #5
0
        /// <summary>
        /// 执行自动化作业
        /// </summary>
        /// <remarks>作业上下文会在这个函数内部被复制,从而保证作业各自的上下文不会互相干扰,而只能对各自的后续作业产生影响</remarks>
        public void Do(IAutomation automation, AutomationContext context, DelegateAutomationDone callback, object stateObject, AutomationUnit callingUnit)
        {
            if (automation == null)
            {
                throw new ArgumentNullException("automation");
            }

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

            _toBeAddList.Add(new AutomationUnit(automation, (AutomationContext)context.Clone(), callback, stateObject, callingUnit));
        }
Beispiel #6
0
 /// <summary>
 /// 执行自动化作业
 /// </summary>
 /// <remarks>简化版,免回调</remarks>
 public void Do(IAutomation automation, AutomationContext context, AutomationUnit callingUnit)
 {
     Do(automation, context, null, null, callingUnit);
 }
Beispiel #7
0
		void NotifyWaitUnit(IAutomation automation, AutomationUnit callingUnit)
		{
			if (callingUnit != null)
			{
				int index = _waitForCompleteList.IndexOf(callingUnit);
                if (index >= 0 && index < _waitForCompleteList.Count)
				{
					AutomationUnit waitUnit = _waitForCompleteList[index] as AutomationUnit;
					IAutomation waitAutomation = waitUnit.Automation;
					if (waitAutomation.Success == automation)
					{
						waitAutomation.Success = null;
					}
					else if (waitAutomation.Failure == automation)
					{
						waitAutomation.Failure = null;
					}
					else if (waitAutomation.Complete == automation)
					{
						waitAutomation.Complete = null;
					}

                    switch (waitAutomation.Result)
                    {
                        case AutomationResult.Success:
                            if (waitAutomation.Success == null && waitAutomation.Complete == null)
                            {
                                if (waitUnit.Callback != null)
                                {
                                    waitUnit.Callback.Invoke(waitUnit.CallbackStateObject);
                                }

                                if (waitUnit.CallingUnit != null)
                                {
                                    NotifyWaitUnit(waitAutomation, waitUnit.CallingUnit);
                                }

                                _waitForCompleteList.Remove(waitUnit);
                            }
                            break;
                        case AutomationResult.Failure:
                            if (waitAutomation.Failure == null && waitAutomation.Complete == null)
                            {
                                if (waitUnit.Callback != null)
                                {
                                    waitUnit.Callback.Invoke(waitUnit.CallbackStateObject);
                                }

                                if (waitUnit.CallingUnit != null)
                                {
                                    NotifyWaitUnit(waitAutomation, waitUnit.CallingUnit);
                                }

                                _waitForCompleteList.Remove(waitUnit);
                            }
                            break;
                    }
					
				}
			}
		}
Beispiel #8
0
		/// <summary>
		/// 等待后续完成
		/// </summary>
		/// <param name="automationUnit"></param>
		private void WaitForComplete(AutomationUnit automationUnit)
		{
			_toBeWaitList.Add(automationUnit);
		}
Beispiel #9
0
		/// <summary>
		/// 删除自动化作业
		/// </summary>
		private void Remove(AutomationUnit automationUnit)
		{
			_toBeDelList.Add(automationUnit);
		}
Beispiel #10
0
		/// <summary>
		/// 执行自动化作业
		/// </summary>
		/// <remarks>作业上下文会在这个函数内部被复制,从而保证作业各自的上下文不会互相干扰,而只能对各自的后续作业产生影响</remarks>
		public void Do(IAutomation automation, AutomationContext context, DelegateAutomationDone callback, object stateObject, AutomationUnit callingUnit)
		{
			if (automation == null)
			{
				throw new ArgumentNullException("automation");
			}

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

			_toBeAddList.Add(new AutomationUnit(automation, (AutomationContext)context.Clone(), callback, stateObject, callingUnit));
		}
Beispiel #11
0
		/// <summary>
		/// 执行自动化作业
		/// </summary>
		/// <remarks>简化版,免回调</remarks>
		public void Do(IAutomation automation, AutomationContext context, AutomationUnit callingUnit)
		{
			Do(automation, context, null, null, callingUnit);
		}
Beispiel #12
0
			public AutomationUnit(IAutomation automation, AutomationContext context, DelegateAutomationDone callback, object stateObject, AutomationUnit callingUnit)
			{
				_automation = automation;
				_context = context;
				_callback = callback;
				_callbackStateObject = stateObject;
				_callingUnit = callingUnit;
			}