protected override IEnumerable <int> GetInterestingElementIds(IContainerElement element) { IMacroCommand c = element.InnerElement as IMacroCommand; yield return(c.Id); if (c.Condition != null) { yield return(c.Condition.ConditionalId); } IWaitConditionCommand wc = c as IWaitConditionCommand; if (wc != null && wc.AwaitedCondition != null) { yield return(wc.AwaitedCondition.ConditionalId); } IStartCommand sc = c as IStartCommand; if (sc != null) { yield return(sc.StartedElementId); } IStopCommand sc2 = c as IStopCommand; if (sc2 != null) { yield return(sc2.StoppedElementId); } }
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 void VisitWaitConditionCommand(IWaitConditionCommand waitConditionCommand) { CheckCondition(waitConditionCommand); if (waitConditionCommand.AwaitedCondition.Conditional == null || Data.DataModule.ElementRepository.GetElement(waitConditionCommand.AwaitedCondition.Conditional.Id) == null) { AddError(m_ModelErrors, ModelError.ErrorSeverity.Error, StringResources.AwaitedElementNotFound, waitConditionCommand); } }
public static String DisplayDescription(this IMacroCommand command, IProject project) { switch (command.CommandType) { case MacroCommandType.StartElement: return(String.Format(StringResources.StartCommand, GetElementDisplayName(((IStartCommand)command).StartedElement, project))); case MacroCommandType.StopElement: return(String.Format(StringResources.StopCommand, GetElementDisplayName(((IStopCommand)command).StoppedElement, project))); case MacroCommandType.WaitTime: return(String.Format(StringResources.WaitTimeCommand, ((IWaitTimeCommand)command).TimeInMillis.ToString(System.Globalization.CultureInfo.CurrentUICulture))); case MacroCommandType.WaitCondition: { IWaitConditionCommand wcc = (IWaitConditionCommand)command; switch (wcc.AwaitedCondition.ConditionType) { case MacroConditionType.ElementNotRunning: return(String.Format(StringResources.WaitElementNotRunningCommand, GetElementDisplayName(wcc.AwaitedCondition.Conditional, project))); case MacroConditionType.ElementRunning: return(String.Format(StringResources.WaitElementRunningCommand, GetElementDisplayName(wcc.AwaitedCondition.Conditional, project))); default: return(StringResources.NoCondition); } } case MacroCommandType.AddTag: return(String.Format(StringResources.AddTagCommand, GetTagName(((ITagCommand)command).TagId, project))); case MacroCommandType.RemoveTag: return(String.Format(StringResources.RemoveTagCommand, GetTagName(((ITagCommand)command).TagId, project))); case MacroCommandType.RemoveAllTags: return(StringResources.RemoveAllTagsCommand); default: return(String.Empty); } }