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; } } } }
public MacroPlayer(IMacro macro, WaitHandle stoppedEvent, IElementPlayerClient client) : base(stoppedEvent, client) { m_Macro = macro; State = MacroPlayerState.NotStarted; m_ConditionEvent = new AutoResetEvent(false); }
public void Start() { State = MacroPlayerState.Running; m_Macro.VisitMacro(this); State = MacroPlayerState.Finished; if (Client != null) { Client.SubPlayerFinished(this, false, false); } }
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; } }