示例#1
0
        public void VisitWaitConditionCommand(IWaitConditionCommand waitConditionCommand)
        {
            if (Client.Stopped)
            {
                return;
            }
            if (IsConditionFulfilled(waitConditionCommand.Condition))
            {
                while (!IsConditionFulfilled(waitConditionCommand.AwaitedCondition))
                {
                    State = MacroPlayerState.WaitingForCondition;
                    MacroPlayers.Instance.AddWaitingPlayer(m_ConditionEvent, waitConditionCommand.AwaitedCondition.ConditionalId);
                    WaitHandle[] handles = new WaitHandle[] { m_ConditionEvent, StoppedEvent };

                    int signaled = WaitHandle.WaitAny(handles);

                    MacroPlayers.Instance.RemoveWaitingPlayer(m_ConditionEvent, waitConditionCommand.AwaitedCondition.ConditionalId);
                    State = MacroPlayerState.Running;
                    if (signaled == 1)
                    {
                        // stop event signaled
                        break;
                    }
                }
            }
        }
示例#2
0
 public MacroPlayer(IMacro macro, WaitHandle stoppedEvent, IElementPlayerClient client)
     : base(stoppedEvent, client)
 {
     m_Macro          = macro;
     State            = MacroPlayerState.NotStarted;
     m_ConditionEvent = new AutoResetEvent(false);
 }
示例#3
0
 public void Start()
 {
     State = MacroPlayerState.Running;
     m_Macro.VisitMacro(this);
     State = MacroPlayerState.Finished;
     if (Client != null)
     {
         Client.SubPlayerFinished(this, false, false);
     }
 }
示例#4
0
 public void VisitWaitTimeCommand(IWaitTimeCommand waitTimeCommand)
 {
     if (Client.Stopped)
     {
         return;
     }
     if (IsConditionFulfilled(waitTimeCommand.Condition))
     {
         State = MacroPlayerState.WaitingForTimeout;
         bool stopped = StoppedEvent.WaitOne(waitTimeCommand.TimeInMillis);
         State = MacroPlayerState.Running;
     }
 }