/// <summary> /// Creates a new instance of <see cref="AttributeExchange"/>. /// </summary> /// <param name="client">Parent <see cref="ClientCore"/> object to attach.</param> public AttributeExchange(ClientCore client) { _Parent = client.StateContainer; _Parent.RegisterPlugIn(this); Mode = AttributeExchangeMode.Fetch; _RequestData = new List<AttributeExchangeItem>(); }
public void ReturnsName() { const string Name = "container"; var stateContainer = new StateContainer <string, int>(Name); stateContainer.Name.Should().Be(Name); }
/// <summary> /// Creates a new instance of <see cref="AttributeExchange"/>. /// </summary> /// <param name="state">Parent <see cref="StateContainer"/> object to attach.</param> public AttributeExchange(StateContainer state) { _Parent = state; state.RegisterPlugIn(this); Mode = AttributeExchangeMode.Fetch; _RequestData = new List<AttributeExchangeItem>(); }
public void ExecuteActions() { const int EventArgument = 17; int?action1Argument = null; int?action2Argument = null; var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionBuilder .In(States.A) .On(Events.B) .Goto(States.B) .Execute <int>(argument => { action1Argument = argument; }) .Execute((int argument) => { action2Argument = argument; }); var stateDefinitions = stateDefinitionBuilder.Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); testee.EnterInitialState(stateContainer, stateDefinitions, States.A); testee.Fire(Events.B, EventArgument, stateContainer, stateDefinitions); action1Argument.Should().Be(EventArgument); action2Argument.Should().Be(EventArgument); }
void OnCollisionEnter2D(Collision2D collision) { if ((collision.collider.gameObject.tag != "Walls" && collision.collider.gameObject.tag == "Player")) { StateContainer.Reload(); } }
public async Task ParameterizedEntryAction() { const int Parameter = 3; var receivedValue = 0; var stateContainer = new StateContainer <States, Events>(); var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionBuilder .In(States.A) .ExecuteOnEntryParametrized(parameter => receivedValue = parameter, Parameter); var stateDefinitions = stateDefinitionBuilder.Build(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); await testee.EnterInitialState(stateContainer, stateDefinitions, States.A) .ConfigureAwait(false); receivedValue .Should() .Be(Parameter); }
public async Task ExitActions() { var exit1 = false; var exit2 = false; var stateContainer = new StateContainer <States, Events>(); var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionBuilder .In(States.A) .ExecuteOnExit(() => exit1 = true) .ExecuteOnExit(() => exit2 = true) .On(Events.B).Goto(States.B); var stateDefinitions = stateDefinitionBuilder.Build(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); await testee.EnterInitialState(stateContainer, stateDefinitions, States.A) .ConfigureAwait(false); await testee.Fire(Events.B, null, stateContainer, stateDefinitions) .ConfigureAwait(false); exit1.Should().BeTrue("exit action was not executed."); exit2.Should().BeTrue("exit action was not executed."); }
public async Task ParametrizedExitAction() { const int Parameter = 3; var receivedValue = 0; var stateContainer = new StateContainer <States, Events>(); var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionBuilder .In(States.A) .ExecuteOnExitParametrized(value => receivedValue = value, Parameter) .On(Events.B).Goto(States.B); var stateDefinitions = stateDefinitionBuilder.Build(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); await testee.EnterInitialState(stateContainer, stateDefinitions, States.A) .ConfigureAwait(false); await testee.Fire(Events.B, null, stateContainer, stateDefinitions) .ConfigureAwait(false); receivedValue.Should().Be(Parameter); }
public async Task EventArgumentIsPassedToTheGuard_AsyncUsage() { const string ExpectedEventArgument = "test"; string actualEventArgument = null; var stateDefinitionsBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionsBuilder .In(States.A) .On(Events.A) .If((string argument) => { actualEventArgument = argument; return(Task.FromResult(true)); }) .Goto(States.B); var stateDefinitions = stateDefinitionsBuilder.Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); await testee.EnterInitialState(stateContainer, stateContainer, stateDefinitions, States.A) .ConfigureAwait(false); await testee.Fire(Events.A, ExpectedEventArgument, stateContainer, stateContainer, stateDefinitions) .ConfigureAwait(false); actualEventArgument .Should() .Be(ExpectedEventArgument); }
private void Reigstration_Click(object sender, RoutedEventArgs e) { var stateContainer = StateContainer.GetStateContainer(); stateContainer.registrationStateService.ChangeState(); if (!stateContainer.registrationStateService.IsLogin) { HaveAccount.Visibility = Visibility.Hidden; EmailBox.Visibility = Visibility.Visible; Registration.Content = "Login"; EnterType.Text = "Registration"; LoginButton.Content = "Registration"; } else { HaveAccount.Visibility = Visibility.Visible; EmailBox.Visibility = Visibility.Hidden; Registration.Content = "Registration"; EnterType.Text = "Login"; LoginButton.Content = "Login"; } ChangeTypeSign(); }
public void ExecutesActions_WhenActionsWithAndWithoutArgumentAreDefined() { const int EventArgument = 17; var action1Executed = false; var action2Executed = false; var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionBuilder .In(States.A) .On(Events.B) .Goto(States.B) .Execute <int>(argument => { action1Executed = true; }) .Execute((int argument) => { action2Executed = true; }); var stateDefinitions = stateDefinitionBuilder.Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); testee.EnterInitialState(stateContainer, stateDefinitions, States.A); testee.Fire(Events.B, EventArgument, stateContainer, stateDefinitions); action1Executed.Should().BeTrue("action with argument should be executed"); action2Executed.Should().BeTrue("action without argument should be executed"); }
public async Task GuardWithoutArguments() { var stateDefinitionsBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionsBuilder .In(States.A) .On(Events.B) .If(() => false).Goto(States.C) .If(() => true).Goto(States.B); var stateDefinitions = stateDefinitionsBuilder.Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); await testee.EnterInitialState(stateContainer, stateContainer, stateDefinitions, States.A) .ConfigureAwait(false); await testee.Fire(Events.B, Missing.Value, stateContainer, stateContainer, stateDefinitions) .ConfigureAwait(false); stateContainer .CurrentStateId .Should() .BeEquivalentTo(Initializable <States> .Initialized(States.B)); }
public void InternalTransition() { var executed = false; var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionBuilder .In(States.A) .On(Events.A) .Execute(() => executed = true); var stateDefinitions = stateDefinitionBuilder.Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); testee.EnterInitialState(stateContainer, stateDefinitions, States.A); testee.Fire(Events.A, stateContainer, stateContainer, stateDefinitions); executed.Should().BeTrue("internal transition was not executed."); stateContainer .CurrentStateId .Should() .BeEquivalentTo(Initializable <States> .Initialized(States.A)); }
public void EnterInitialState() { const States InitialState = States.A; var information = A.Fake <IStateMachineInformation <States, Events> >(); var extension = A.Fake <IExtension <States, Events> >(); var stateContainer = new StateContainer <States, Events>(); stateContainer.Extensions.Add(extension); var stateDefinitionsBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionsBuilder.In(InitialState); var stateDefinitions = stateDefinitionsBuilder.Build(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); testee.EnterInitialState(stateContainer, information, stateDefinitions, InitialState); A.CallTo(() => extension.EnteringInitialState(information, InitialState)) .MustHaveHappened(); A.CallTo(() => extension.EnteredInitialState( information, InitialState, A <ITransitionContext <States, Events> > .That.Matches(context => context.StateDefinition == null))) .MustHaveHappened(); }
public void MissingTransition() { var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionBuilder .In(States.A) .On(Events.B) .Goto(States.B); var stateDefinitions = stateDefinitionBuilder.Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); var declined = false; testee.TransitionDeclined += (sender, e) => { declined = true; }; testee.EnterInitialState(stateContainer, stateDefinitions, States.A); testee.Fire(Events.C, stateContainer, stateContainer, stateDefinitions); declined.Should().BeTrue("Declined event was not fired"); stateContainer .CurrentStateId .Should() .BeEquivalentTo(Initializable <States> .Initialized(States.A)); }
public void ExecuteTransitionBetweenStatesOnDifferentLevelsDownwards() { var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); testee.EnterInitialState(stateContainer, stateContainer, this.stateDefinitions, States.B2); this.ClearRecords(); testee.Fire(Events.C1B, stateContainer, stateContainer, this.stateDefinitions); stateContainer .CurrentStateId .Should() .BeEquivalentTo(Initializable <States> .Initialized(States.C1B)); this.CheckRecord <ExitRecord>(States.B2); this.CheckRecord <ExitRecord>(States.B); this.CheckRecord <EntryRecord>(States.C); this.CheckRecord <EntryRecord>(States.C1); this.CheckRecord <EntryRecord>(States.C1B); this.CheckNoRemainingRecords(); }
public void ListenInitialState() { var container = new StateContainer(new IndexedDictionary <string, object>()); var listenCalls = 0; container.Listen("players/:id/position/:attribute", (DataChange change) => { listenCalls++; }); container.Listen("turn", (DataChange change) => { listenCalls++; }); container.Listen("game/turn", (DataChange change) => { listenCalls++; }); container.Listen("messages/:number", (DataChange change) => { listenCalls++; }); container.Set(GetRawData()); Assert.AreEqual(9, listenCalls); }
public void ExecuteTransitionWithHistoryTypeDeep() { var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); testee.EnterInitialState(stateContainer, stateContainer, this.stateDefinitions, States.D1B); testee.Fire(Events.A, stateContainer, stateContainer, this.stateDefinitions); this.ClearRecords(); testee.Fire(Events.D, stateContainer, stateContainer, this.stateDefinitions); stateContainer .CurrentStateId .Should() .BeEquivalentTo(Initializable <States> .Initialized(States.D1B)); this.CheckRecord <ExitRecord>(States.A); this.CheckRecord <EntryRecord>(States.D); this.CheckRecord <EntryRecord>(States.D1); this.CheckRecord <EntryRecord>(States.D1B); this.CheckNoRemainingRecords(); }
public async Task DeclinesTransition_WhenAGuardThrowsAnException() { var eventArguments = new object[] { 1, 2, "test" }; var exception = new Exception(); bool ThrowingGuard() => throw exception; var stateDefinitionsBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionsBuilder .In(States.A) .On(Events.B) .If(ThrowingGuard).Goto(States.B); var stateDefinitions = stateDefinitionsBuilder.Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); var transitionDeclined = false; testee.TransitionDeclined += (sender, e) => transitionDeclined = true; testee.TransitionExceptionThrown += (sender, eventArgs) => { }; await testee.EnterInitialState(stateContainer, stateDefinitions, States.A) .ConfigureAwait(false); await testee.Fire(Events.B, eventArguments, stateContainer, stateDefinitions) .ConfigureAwait(false); transitionDeclined .Should() .BeTrue("transition was not declined."); }
public async Task StaysInCurrentState_WhenAGuardThrowsAnException() { var eventArguments = new object[] { 1, 2, "test" }; var exception = new Exception(); bool ThrowingGuard() => throw exception; var stateDefinitionsBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionsBuilder .In(States.A) .On(Events.B) .If(ThrowingGuard).Goto(States.B); var stateDefinitions = stateDefinitionsBuilder.Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); testee.TransitionExceptionThrown += (sender, eventArgs) => { }; await testee.EnterInitialState(stateContainer, stateDefinitions, States.A) .ConfigureAwait(false); await testee.Fire(Events.B, eventArguments, stateContainer, stateDefinitions) .ConfigureAwait(false); stateContainer .CurrentStateId .Should() .BeEquivalentTo(Initializable <States> .Initialized(States.A)); }
public override void Invoke(bool isSimulate, bool async) { OpenPlanetMenuCommand openPlanetMenuCommand = new OpenPlanetMenuCommand(Point); openPlanetMenuCommand.StateContainer = StateContainer; openPlanetMenuCommand.Invoke(isSimulate, async); log.Debug(this.ToString()); StateContainer.EnterPlanet(); if (isSimulate) { sim.Mouse.MoveMouseBy(0, -25).Sleep(100).LeftButtonClick().Sleep(1000); if (FirstTime) { sim.Mouse.LeftButtonClick().Sleep(100).LeftButtonClick().Sleep(100).LeftButtonClick().Sleep(100); } sim.Mouse.MoveMouseTo(500 * xf, 560 * yf); sim.Mouse.LeftButtonDown().Sleep(200); sim.Mouse.MoveMouseBy(0, -5).Sleep(200); sim.Mouse.LeftButtonUp().Sleep(200); sim.Mouse.MoveMouseTo(500 * xf, 560 * yf).LeftButtonClick().Sleep(800); sim.Mouse.LeftButtonDown().Sleep(800); sim.Mouse.MoveMouseTo(500 * xf, 330 * yf).Sleep(500); sim.Mouse.LeftButtonUp().Sleep(500); } }
public void EventArgumentIsPassedToTheGuard() { const string EventArgument = "test"; string actualEventArgument = null; var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionBuilder .In(States.A) .On(Events.A) .If <string>(argument => { actualEventArgument = argument; return(true); }) .Goto(States.B); var stateDefinitions = stateDefinitionBuilder .Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); testee.EnterInitialState(stateContainer, stateDefinitions, States.A); testee.Fire(Events.A, EventArgument, stateContainer, stateDefinitions); actualEventArgument.Should().Be(EventArgument); }
public DataManager(StateContainer stateContainer) { Loaded = false; StateContainer = stateContainer; Culture = CultureInfo.InvariantCulture; Recipes = ReadCsvToList <CubeMain>(stateContainer.DataFiles[DataFileTypes.CubeMain]); ISC = ReadCsvToDictISC(stateContainer.DataFiles[DataFileTypes.ItemStatCost]); Properties = ReadCsvToDictProp(stateContainer.DataFiles[DataFileTypes.Properties]); CompilePropertyStats(); Prefixes = ReadCsvToListAffix(stateContainer.DataFiles[DataFileTypes.MagicPrefix]); Suffixes = ReadCsvToListAffix(stateContainer.DataFiles[DataFileTypes.MagicSuffix]); Items = new Dictionary <string, Item>(); ReadItems(stateContainer.DataFiles[DataFileTypes.Armor]); ReadItems(stateContainer.DataFiles[DataFileTypes.Weapons]); ReadItems(stateContainer.DataFiles[DataFileTypes.Misc]); ItemsShort = ReadCsvToDictItemsShort(stateContainer.DataFiles[DataFileTypes.ItemShort]); ItemTypes = ReadCsvToDictItemType(stateContainer.DataFiles[DataFileTypes.ItemTypes]); BuildItemTypeTree(); Strings = new Dictionary <string, string>(); ReadStrings(stateContainer.DataFiles[DataFileTypes.PatchStrings]); ReadStrings(stateContainer.DataFiles[DataFileTypes.ExpStrings]); ReadStrings(stateContainer.DataFiles[DataFileTypes.Strings]); ConvertRecipes(); GetItemStrings(); CheckPropGroups(); SetupAffixItemTypes(Prefixes); SetupAffixItemTypes(Suffixes); PrepareAffixMods(Prefixes); PrepareAffixMods(Suffixes); InitItemsAndTypesList(); Loaded = true; }
public void GuardWithASingleArgument() { var stateDefinitionBuilder = new StateDefinitionsBuilder <States, Events>(); stateDefinitionBuilder .In(States.A) .On(Events.B) .If <int>(SingleIntArgumentGuardReturningFalse).Goto(States.C) .If(() => false).Goto(States.D) .If(() => false).Goto(States.E) .If <int>(SingleIntArgumentGuardReturningTrue).Goto(States.B); var stateDefinitions = stateDefinitionBuilder .Build(); var stateContainer = new StateContainer <States, Events>(); var testee = new StateMachineBuilder <States, Events>() .WithStateContainer(stateContainer) .Build(); testee.EnterInitialState(stateContainer, stateDefinitions, States.A); testee.Fire(Events.B, 3, stateContainer, stateDefinitions); stateContainer .CurrentStateId .Should() .BeEquivalentTo(Initializable <States> .Initialized(States.B)); }
void OnCollisionEnter2D(Collision2D collision) { if ((collision.collider.gameObject.tag != "Walls" && collision.collider.gameObject.tag == "Player")) { StateContainer.CompleteStimulus(); } }
public void ReturnsNullAsLastActiveStateWhenStateWasNeverSet() { var stateContainer = new StateContainer <string, int>("container"); stateContainer.SetLastActiveStateFor("A", A.Fake <IStateDefinition <string, int> >()); stateContainer.GetLastActiveStateOrNullFor("B").Should().BeNull(); }
private async Task RemoveSideItem(Guid itemid) { var items = StateContainer.SideItems; var item = items.Find(id => id.ItemId == itemid); items.Remove(item); StateContainer.SetSideItems(items); }
public IRequestResult <IHydrationObject> Dehydrate() { StateContainer container = new StateContainer { Target = Target, MimeType = MimeType }; return(RequestResult <IHydrationObject> .Create(new HydrationObject(GetType(), container.Serialize().ToString()))); }
public IRequestResult <IHydrationObject> Dehydrate() { StateContainer container = new StateContainer { Messages = Messages }; return(RequestResult <IHydrationObject> .Create(new HydrationObject(GetType(), container.Serialize().ToString()) { ServiceInterface = typeof(IMessageSource) })); }
// Record subscription prototype, and any pending messages public virtual IRequestResult <IHydrationObject> Dehydrate() { StateContainer container = Dehydrating(); container.BundlePrototype = BundlePrototype; container.FailureHandlers = FailureHandlerSet.Select(h => h.Dehydrate().Containee).ToArray(); return(RequestResult <IHydrationObject> .Create(new HydrationObject(GetType(), container.Serialize().ToString()) { ServiceInterface = typeof(IMessageHandler) })); }
public override void Invoke(bool isSimulate, bool async) { log.Debug(this.ToString()); StateContainer.EnterMissionPanel(); if (isSimulate) { sim.Mouse.MoveMouseTo(923 * xf, 767 * yf).Sleep(100).LeftButtonClick().Sleep(500); } }
public override void Invoke(bool isSimulate, bool async) { log.Debug(this.ToString()); StateContainer.EnterPlanetary(); if (isSimulate) { sim.Mouse.MoveMouseTo(795 * xf, 79 * yf).Sleep(100).LeftButtonClick().Sleep(500); } }
/// <summary> /// Creates a new Authentication plugin and registers it with a StateContainer object. /// </summary> /// <param name="state">Parent <see cref="StateContainer"/> object to attach.</param> public IdentityAuthentication(StateContainer state) { _Parent = state; _Parent.RegisterPlugIn(this); }
public IRequestResult<IHydrationObject> Dehydrate() { StateContainer container = new StateContainer { Messages = Messages }; return RequestResult<IHydrationObject>.Create(new HydrationObject(GetType(), container.Serialize().ToString()) { ServiceInterface = typeof(IMessageSource) }); }
/// <summary> /// Creates a new instance of <see cref="SimpleRegistration"/>. /// </summary> /// <param name="state"><see cref="StateContainer"/> object to attach.</param> public SimpleRegistration(StateContainer state) { _RequiredFields = new List<string>(); _OptionalFields = new List<string>(); _Parent = state; _Parent.RegisterPlugIn(this); }
/// <summary> /// Creates a new SimpleRegistration plugin and registers it with an <see cref="ClientCore"/> object. /// </summary> /// <param name="client">The <see cref="ClientCore"/> object to attach.</param> public SimpleRegistration(ClientCore client) { _RequiredFields = new List<string>(); _OptionalFields = new List<string>(); _Parent = client.StateContainer; _Parent.RegisterPlugIn(this); }
/// <summary> /// Create a new instance of OAuthExtension. /// </summary> /// <param name="state">OpenIdClient's StateContainer object.</param> /// <param name="oauthClient">The OAuth Consumer to use.</param> public OAuthExtension(StateContainer state, OAuthClient oauthClient) { _Parent = state; state.RegisterPlugIn(this); OAuthClient = oauthClient; }
/// <summary> /// Creates a new instance of Yadis. /// </summary> /// <param name="state">Parent <see cref="StateContainer" /> object.</param> public Yadis(StateContainer state) { Parent = state; state.RegisterPlugIn(this); }
/// <summary> /// Create a new instance of OAuthExtension. /// </summary> /// <param name="core">The OpenIdClient to use.</param> /// <param name="oauthClient">The OAuth Consumer to use.</param> public OAuthExtension(ClientCore core, OAuthClient oauthClient) { _Parent = core.StateContainer; _Parent.RegisterPlugIn(this); OAuthClient = oauthClient; }
private void showStateGraphToolStripMenuItem_Click(object sender, EventArgs e) { if (this.selectedNode != null) { IState state = this.exploredTransitions.stateMap[this.selectedNode]; StateContainer<IState> sc = new StateContainer<IState>(this.modelProgram, state); // FSM fsm = FSM.Create("T(o1(),label2(),o2())", "T(o2(),label2(),o3())").Accept("o2()"); FSM fsm = FSM.Create(sc.ExtractFSM(state)); FsmModelProgram mp = new FsmModelProgram(fsm, this.selectedNode.ToString()); Visualization.ModelProgramGraphViewForm form = new ModelProgramGraphViewForm("State graph viewer", false); form.View.StateShape = StateShape.Box; //form.View.SetModelProgram(mp); form.View.SetStateMachine(fsm,null); form.View.transitionLabels = TransitionLabel.ActionSymbol; form.Show(); } }
public IRequestResult<IHydrationObject> Dehydrate() { StateContainer container = new StateContainer { Target = Target, MimeType = MimeType }; return RequestResult<IHydrationObject>.Create(new HydrationObject(GetType(), container.Serialize().ToString())); }
/// <summary> /// Creates an instance of AuthenticationPolicy extension. /// </summary> /// <param name="state">The parent StateContainer object.</param> public AuthenticationPolicy(StateContainer state) { _Parent = state; _Parent.RegisterPlugIn(this); _PreferredPolicies = new List<Uri>(); }
/// <summary> /// Creates an instance of AuthenticationPolicy extension. /// </summary> /// <param name="client">The parent <see cref="ClientCore"/> object.</param> public AuthenticationPolicy(ClientCore client) { _Parent = client.StateContainer; _Parent.RegisterPlugIn(this); _PreferredPolicies = new List<Uri>(); }
/// <summary> /// Check if the term represented by goal is reachable. Empty string results in traversing the whole state space. /// </summary> /// <param name="goal">The goal term involving the model program name as outer function symbol.</param> public ReachabilityResult CheckReachability(string goal) { uint transCnt = 0; uint stateCount = 0; //(firstExploration ? (initTransitions < 0 ? maxTransitions : initTransitions) : maxTransitions); //firstExploration = false; //excludeIsomorphicStates = false; Set<CompoundTerm> goals = processGoal(modelProgram, goal); Pair<Set<CompoundTerm>, Set<Term>> simpleAndFsmGoals = splitGoals(goals); if (GoalsSatisfied(simpleAndFsmGoals, modelProgram.InitialState)) goto end; if (excludeIsomorphicStates) { Set<IState> frontier = new Set<IState>(modelProgram.InitialState); //stateCount++; //Set<IState> visited = Set<IState>.EmptySet; StateContainer<IState> visited = new StateContainer<IState>(this.modelProgram, modelProgram.InitialState); stateCount++; // need to add a check about the initial state. Set<string> transitionPropertyNames = Set<string>.EmptySet; TransitionProperties transitionProperties; while (!frontier.IsEmpty) { IState sourceIState = frontier.Choose(0); frontier = frontier.Remove(sourceIState); foreach (Symbol aSymbol in this.modelProgram.PotentiallyEnabledActionSymbols(sourceIState)) { foreach (CompoundTerm action in this.modelProgram.GetActions(sourceIState, aSymbol)) { //Node targetNode = GetTargetNode(sourceNode, action); IState targetIState = modelProgram.GetTargetState(sourceIState, action, transitionPropertyNames, out transitionProperties); //if (this.modelProgram.IsAccepting(targetIState)) // this.acceptingNodes = this.acceptingNodes.Add(targetNode); //if (!this.modelProgram.SatisfiesStateInvariant(targetState)) // this.errorNodes = this.errorNodes.Add(targetNode); //IState isomorphicState; //Transition t; transCnt++; IState isomorphicState; if (!visited.HasIsomorphic(targetIState, out isomorphicState)) { if (GoalsSatisfied(simpleAndFsmGoals, targetIState)) goto end; frontier = frontier.Add(targetIState); visited.Add(targetIState); stateCount++; //visited.Add(targetIState); //t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, targetNode); } //else //{ // //if (collapseExcludedIsomorphicStates) // // t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, nodeMap[isomorphicState]); // //else // { // Term isoNode = nodeMap[isomorphicState]; // t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, targetNode); // if (!targetNode.Equals(sourceNode) && !targetNode.Equals(isoNode)) // groupingTransitions = groupingTransitions.Add(new Triple<Term, CompoundTerm, Term>(targetNode, new CompoundTerm(new Symbol("IsomorphicTo"), new Sequence<Term>()), isoNode)); // } //} //this.transitions = this.transitions.Add(t); //this.hiddenTransitions = this.hiddenTransitions.Remove(t); } } } //Set<IState> frontier = new Set<IState>(stateMap[node]); //StateContainer<IState> visited = new StateContainer<IState>(this.modelProgram, stateMap[node]); //while (!frontier.IsEmpty && this.transitions.Count < transCnt) //{ // IState sourceIState = frontier.Choose(0); // Node sourceNode = nodeMap[sourceIState]; // frontier = frontier.Remove(sourceIState); // foreach (Symbol aSymbol in this.modelProgram.PotentiallyEnabledActionSymbols(sourceIState)) // { // foreach (CompoundTerm action in this.modelProgram.GetActions(sourceIState, aSymbol)) // { // Node targetNode = GetTargetNode(sourceNode, action); // IState targetIState = stateMap[targetNode]; // IState isomorphicState; // Transition t; // if (!visited.HasIsomorphic(targetIState, out isomorphicState)) // { // frontier = frontier.Add(targetIState); // //visited = visited.Add(targetIState); // visited.Add(targetIState); // t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, targetNode); // } // else // { // if (collapseExcludedIsomorphicStates) // t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, nodeMap[isomorphicState]); // else // { // Term isoNode = nodeMap[isomorphicState]; // t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, targetNode); // if (!targetNode.Equals(sourceNode) && !targetNode.Equals(isoNode)) // groupingTransitions = groupingTransitions.Add(new Triple<Term, CompoundTerm, Term>(targetNode, new CompoundTerm(new Symbol("IsomorphicTo"), new Sequence<Term>()), isoNode)); // } // } // this.transitions = this.transitions.Add(t); // this.hiddenTransitions = this.hiddenTransitions.Remove(t); // } // } //} ////Console.WriteLine(dashedTransitions.ToString()); ////Console.WriteLine(visited.ToString()); } else { Set<IState> frontier = new Set<IState>(modelProgram.InitialState); Console.Out.WriteLine(frontier.ToString()); Console.Out.WriteLine(modelProgram.ToString()); stateCount++; // need to add a check about the initial state. Set<IState> visited = new Set<IState>(modelProgram.InitialState); Set<string> transitionPropertyNames = Set<string>.EmptySet; TransitionProperties transitionProperties; while (!frontier.IsEmpty) { IState sourceIState = frontier.Choose(0); frontier = frontier.Remove(sourceIState); foreach (Symbol aSymbol in this.modelProgram.PotentiallyEnabledActionSymbols(sourceIState)) { foreach (CompoundTerm action in this.modelProgram.GetActions(sourceIState, aSymbol)) { //Node targetNode = GetTargetNode(sourceNode, action); IState targetIState = modelProgram.GetTargetState(sourceIState, action, transitionPropertyNames, out transitionProperties); //Console.WriteLine(sourceIState.ToString()); //Console.WriteLine ("--- " + action + " --->"); //Console.WriteLine (targetIState.ToString()); //Console.WriteLine(); //Console.WriteLine(); //if (this.modelProgram.IsAccepting(targetIState)) // this.acceptingNodes = this.acceptingNodes.Add(targetNode); //if (!this.modelProgram.SatisfiesStateInvariant(targetState)) // this.errorNodes = this.errorNodes.Add(targetNode); //IState isomorphicState; //Transition t; transCnt++; if (!visited.Contains(targetIState)) { if (GoalsSatisfied(simpleAndFsmGoals, targetIState)) goto end; frontier = frontier.Add(targetIState); visited = visited.Add(targetIState); stateCount++; //visited.Add(targetIState); //t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, targetNode); } //else //{ // //if (collapseExcludedIsomorphicStates) // // t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, nodeMap[isomorphicState]); // //else // { // Term isoNode = nodeMap[isomorphicState]; // t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, targetNode); // if (!targetNode.Equals(sourceNode) && !targetNode.Equals(isoNode)) // groupingTransitions = groupingTransitions.Add(new Triple<Term, CompoundTerm, Term>(targetNode, new CompoundTerm(new Symbol("IsomorphicTo"), new Sequence<Term>()), isoNode)); // } //} //this.transitions = this.transitions.Add(t); //this.hiddenTransitions = this.hiddenTransitions.Remove(t); } } } } //Console.WriteLine("Checker results"); //Console.WriteLine("Reached states: "+stateCount); //Console.WriteLine("Number of transitions: "+transCnt); ReachabilityResult result = new ReachabilityResult(stateCount, transCnt); return result; end: ReachabilityResult resReached = new ReachabilityResult(stateCount, transCnt); resReached.Goal = goal; resReached.GoalReached = true; return resReached; }
/// <summary> /// Show all transitions from the given node and from the nodes that are reached from /// the given node etc., until the maximum nr of transitions is reached /// </summary> internal void ShowReachable(Node node) { int transCnt = (firstExploration ? (initTransitions < 0 ? maxTransitions : initTransitions) : maxTransitions); firstExploration = false; if (excludeIsomorphicStates) { Set<IState> frontier = new Set<IState>(stateMap[node]); StateContainer<IState> visited = new StateContainer<IState>(this.modelProgram, stateMap[node]); while (!frontier.IsEmpty && this.transitions.Count < transCnt) { IState sourceIState = frontier.Choose(0); Node sourceNode = nodeMap[sourceIState]; frontier = frontier.Remove(sourceIState); foreach (Symbol aSymbol in this.modelProgram.PotentiallyEnabledActionSymbols(sourceIState)) { foreach (CompoundTerm action in this.modelProgram.GetActions(sourceIState, aSymbol)) { Node targetNode; if (TryGetTargetNode(sourceNode, action, out targetNode)) { IState targetIState = stateMap[targetNode]; IState isomorphicState; Transition t; if (!visited.HasIsomorphic(targetIState, out isomorphicState)) { frontier = frontier.Add(targetIState); //visited = visited.Add(targetIState); visited.Add(targetIState); t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, targetNode); } else { if (collapseExcludedIsomorphicStates) t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, nodeMap[isomorphicState]); else { Term isoNode = nodeMap[isomorphicState]; t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, targetNode); if (!targetNode.Equals(sourceNode) && !targetNode.Equals(isoNode)) groupingTransitions = groupingTransitions.Add(new Triple<Term, CompoundTerm, Term>(targetNode, new CompoundTerm(new Symbol("IsomorphicTo"), new Sequence<Term>()), isoNode)); } } this.transitions = this.transitions.Add(t); this.hiddenTransitions = this.hiddenTransitions.Remove(t); } } } } //Console.WriteLine(dashedTransitions.ToString()); //Console.WriteLine(visited.ToString()); } else { Set<Node> frontier = new Set<Node>(node); Set<Node> visited = frontier; while (!frontier.IsEmpty && this.transitions.Count < transCnt) { Node sourceNode = frontier.Choose(0); frontier = frontier.Remove(sourceNode); foreach (Symbol aSymbol in this.modelProgram.PotentiallyEnabledActionSymbols(stateMap[sourceNode])) { foreach (CompoundTerm action in this.modelProgram.GetActions(stateMap[sourceNode], aSymbol)) { Node targetNode; if (TryGetTargetNode(sourceNode, action, out targetNode)) { if (!visited.Contains(targetNode)) { frontier = frontier.Add(targetNode); visited = visited.Add(targetNode); } Transition t = new Triple<Term, CompoundTerm, Term>(sourceNode, action, targetNode); this.transitions = this.transitions.Add(t); this.hiddenTransitions = this.hiddenTransitions.Remove(t); } } } } } }
/// <summary> /// Creates a new Authentication plugin and registers it with ClientCore object. /// </summary> /// <param name="client">The <see cref="ClientCore"/> object to attach.</param> public IdentityAuthentication(ClientCore client) { _Parent = client.StateContainer; _Parent.RegisterPlugIn(this); }