/// <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();
     }
 }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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.");
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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");
        }
Beispiel #12
0
        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));
        }
Beispiel #14
0
        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();
        }
Beispiel #17
0
    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);
            }
        }
Beispiel #22
0
        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);
        }
Beispiel #23
0
 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;
 }
Beispiel #24
0
        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();
        }
Beispiel #27
0
        private async Task RemoveSideItem(Guid itemid)
        {
            var items = StateContainer.SideItems;
            var item  = items.Find(id => id.ItemId == itemid);

            items.Remove(item);
            StateContainer.SetSideItems(items);
        }
Beispiel #28
0
        public IRequestResult <IHydrationObject> Dehydrate()
        {
            StateContainer container = new StateContainer {
                Target = Target, MimeType = MimeType
            };

            return(RequestResult <IHydrationObject> .Create(new HydrationObject(GetType(), container.Serialize().ToString())));
        }
Beispiel #29
0
        public IRequestResult <IHydrationObject> Dehydrate()
        {
            StateContainer container = new StateContainer {
                Messages = Messages
            };

            return(RequestResult <IHydrationObject> .Create(new HydrationObject(GetType(), container.Serialize().ToString()) { ServiceInterface = typeof(IMessageSource) }));
        }
Beispiel #30
0
        // 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;
 }
Beispiel #38
0
 /// <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;
 }
Beispiel #40
0
 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();
     }
 }
Beispiel #41
0
 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>();
 }
Beispiel #44
0
        /// <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;
        }
Beispiel #45
0
        /// <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);
 }