Example #1
0
        private static IMobStator <User, UserSubscription> GetMobStatorForTwoEntities()
        {
            var statorForUser = Stator <User, UserStatus> .InitStator()
                                .State(x => x.Status)
                                .ForEvent <UserBlockedEvent>()
                                .SetTransition(UserStatus.Active, UserStatus.Inactive).ConfirmTransition()
                                .SetTransition(UserStatus.Premium, UserStatus.Inactive).ConfirmTransition()
                                .SetTransition(UserStatus.Striked, UserStatus.Deleted).ConfirmTransition()
                                .ConfirmEvent()
                                .Build();

            var statorForSubscription = Stator <UserSubscription, SubscriptionStatus> .InitStator()
                                        .State(x => x.Status)
                                        .ForEvent <UserBlockedEvent>()
                                        .SetTransition(SubscriptionStatus.Active, SubscriptionStatus.Closed).ConfirmTransition()
                                        .SetTransition(SubscriptionStatus.Pending, SubscriptionStatus.Closed).ConfirmTransition()
                                        .ConfirmEvent()
                                        .Build();

            var mobStator =
                MobStatorFactory
                .InitWithStator(statorForUser)
                .AddStateMachine(statorForSubscription)
                .Build();

            return(mobStator);
        }
Example #2
0
        static StatorResilienceTests()
        {
            _stator = Stator <Order, State> .InitStator()
                      .State(x => x.State)

                      .ForEvent <OrderCreatedEvent>()
                      .SetTransition(default, new State {
Example #3
0
        private static IMobStator <User, UserSubscription> GetBrokenMobStatorForTwoEntities(bool withRollbackOnFailure)
        {
            var statorForUser = Stator <User, UserStatus> .InitStator()
                                .State(x => x.Status)
                                .ForEvent <UserBlockedEvent>()
                                .SetTransition(UserStatus.Active, UserStatus.Inactive).ConfirmTransition()
                                .ConfirmEvent()
                                .Build();

            var statorForSubscription = Stator <UserSubscription, SubscriptionStatus> .InitStator()
                                        .State(x => x.Status)
                                        .ForEvent <UserBlockedEvent>()
                                        .SetTransition(SubscriptionStatus.Active, SubscriptionStatus.Closed)
                                        .WithActionAfterTransition((x, y) => throw new Exception())
                                        .ConfirmTransition()
                                        .ConfirmEvent()
                                        .Build();

            var mobStator =
                MobStatorFactory
                .InitWithStator(statorForUser, withRollbackOnFailure)
                .AddStateMachine(statorForSubscription)
                .Build();

            return(mobStator);
        }
Example #4
0
        public void Should_invoke_transition_handlers()
        {
            var handlerBeforeTransition1Fired = false;
            var handlerAfterTransition1Fired  = false;
            var handlerBeforeTransition2Fired = false;
            var handlerAfterTransition2Fired  = false;

            var stator = Stator <User, UserStatus> .InitStator()
                         .State(x => x.Status)
                         .ForEvent <UserBlockedEvent>()
                         .SetTransition(UserStatus.Active, UserStatus.Inactive)
                         .WithActionBeforeTransition((entity, e) => handlerBeforeTransition1Fired = true)
                         .WithActionAfterTransition((entity, e) => handlerAfterTransition1Fired   = true)
                         .ConfirmTransition()
                         .ConfirmEvent()
                         .Build();

            var @event = new UserBlockedEvent();
            var user   = new User {
                Status = UserStatus.Active
            };
            var result = stator.Go(user, @event);

            Assert.True(handlerBeforeTransition1Fired);
            Assert.False(handlerBeforeTransition2Fired);
            Assert.True(handlerAfterTransition1Fired);
            Assert.False(handlerAfterTransition2Fired);
        }
Example #5
0
 void MyWheel_IsWorkingChanged(MyCubeBlock obj)
 {
     if (Stator != null)
     {
         Stator.UpdateIsWorking();
     }
 }
Example #6
0
        public virtual void CalcPointsCoordinates()
        {
            if (Stator == null)
            {
                throw new ArgumentNullException("StatorParams null");
            }
            if (Rotor == null)
            {
                throw new ArgumentNullException("RotorParams null");
            }
            if (Airgap == null)
            {
                throw new ArgumentNullException("AirgapParams null");
            }

            Rotor.CalculatePoints();

            Stator.CalculatePoints();

            Airgap.CalculatePoints();

            ListParamsValidation = new List <ParamValidationInfo>();
            if (Rotor.ListParamsValidation != null)
            {
                ListParamsValidation.AddRange(Rotor.ListParamsValidation);
            }
            if (Stator.ListParamsValidation != null)
            {
                ListParamsValidation.AddRange(Stator.ListParamsValidation);
            }

            isPointsCoordCalculated = true;
        }
Example #7
0
        /// <inheritdoc />
        public override void UpdateBeforeSimulation100()
        {
            if (Stator == null || !Stator.IsWorking || Stator.Top == null || Stator.Top.Closed || Mod.Static.SunTracker == null)
            {
                return;
            }

            var sunDirection = Mod.Static.SunTracker.CalculateSunDirection();

            Stator.PointRotorAtVector(sunDirection, Stator.Top.WorldMatrix.Forward, 3 * MathHelper.RPMToRadiansPerSecond);
        }
Example #8
0
        private static IMobStator GetBrokenMobStatorWithFiveEntities(bool withRollbackOnFailure)
        {
            var statorForUser = Stator <User, UserStatus> .InitStator()
                                .State(x => x.Status)
                                .ForEvent <UserBlockedEvent>()
                                .SetTransition(UserStatus.Active, UserStatus.Inactive).ConfirmTransition()
                                .SetTransition(UserStatus.Premium, UserStatus.Inactive).ConfirmTransition()
                                .SetTransition(UserStatus.Striked, UserStatus.Deleted).ConfirmTransition()
                                .ConfirmEvent()
                                .Build();

            var statorForSubscription = Stator <UserSubscription, SubscriptionStatus> .InitStator()
                                        .State(x => x.Status)
                                        .ForEvent <UserBlockedEvent>()
                                        .SetTransition(SubscriptionStatus.Active, SubscriptionStatus.Closed).ConfirmTransition()
                                        .SetTransition(SubscriptionStatus.Pending, SubscriptionStatus.Closed).ConfirmTransition()
                                        .ConfirmEvent()
                                        .Build();

            var statorForPersonalSpace = Stator <PersonalSpace, PersonalSpaceStatus> .InitStator()
                                         .State(x => x.Status)
                                         .ForEvent <UserBlockedEvent>()
                                         .SetTransition(PersonalSpaceStatus.Granted, PersonalSpaceStatus.Blocked)
                                         .WithActionAfterTransition((x, y) => throw new Exception())
                                         .ConfirmTransition()
                                         .ConfirmEvent()
                                         .Build();

            var statorForAccount = Stator <Account, AccountStatus> .InitStator()
                                   .State(x => x.Status)
                                   .ForEvent <UserBlockedEvent>()
                                   .SetTransition(AccountStatus.Existed, AccountStatus.Deleted).ConfirmTransition()
                                   .SetTransition(AccountStatus.Blocked, AccountStatus.Deleted).ConfirmTransition()
                                   .ConfirmEvent()
                                   .Build();

            var statorForRanking = Stator <Ranking, RankingStatus> .InitStator()
                                   .State(x => x.Status)
                                   .ForEvent <UserBlockedEvent>()
                                   .SetTransition(RankingStatus.Tracked, RankingStatus.Untracked).ConfirmTransition()
                                   .ConfirmEvent()
                                   .Build();

            var mobStator =
                MobStatorFactory
                .InitWithStator(statorForUser, withRollbackOnFailure)
                .AddStateMachine(statorForSubscription)
                .AddStateMachine(statorForAccount)
                .AddStateMachine(statorForPersonalSpace)
                .AddStateMachine(statorForRanking)
                .Build();

            return(mobStator);
        }
        public override void Init(MyObjectBuilder_EntityBase objectBuilder)
        {
            base.Init(objectBuilder);

            if (Stator.IsProjected())
            {
                return;
            }

            NeedsUpdate = MyEntityUpdateEnum.EACH_100TH_FRAME;
        }
Example #10
0
        public void Should_be_resilient_against_unregistered_events()
        {
            var stator = Stator <User, UserStatus> .InitStator()
                         .State(x => x.Status)
                         .Build();

            var lift   = stator.GetEventLift(new UserDeletedEvent());
            var result = lift.Go(new User());

            Assert.False(result.Success);
            Assert.Equal(FailureTypes.EventNotRegistered, result.FailureType);
        }
Example #11
0
        private static IMobStator GetMobStatorForFiveInconsistentEntities()
        {
            var statorForUser = Stator <User, UserStatus> .InitStator()
                                .State(x => x.Status)
                                .ForEvent <UserBlockedEvent>()
                                .SetTransition(UserStatus.Active, UserStatus.Inactive).ConfirmTransition()
                                .SetTransition(UserStatus.Premium, UserStatus.Inactive).ConfirmTransition()
                                .SetTransition(UserStatus.Striked, UserStatus.Deleted).ConfirmTransition()
                                .ConfirmEvent()
                                .Build();

            var statorForSubscription = Stator <UserSubscription, SubscriptionStatus> .InitStator()
                                        .State(x => x.Status)
                                        .ForEvent <UserBlockedEvent>()
                                        .SetTransition(SubscriptionStatus.Active, SubscriptionStatus.Closed).ConfirmTransition()
                                        .SetTransition(SubscriptionStatus.Pending, SubscriptionStatus.Closed).ConfirmTransition()
                                        .ConfirmEvent()
                                        .Build();

            var statorForAccount = Stator <Account, AccountStatus> .InitStator()
                                   .State(x => x.Status)
                                   .ForEvent <UserBlockedEvent>()
                                   .SetTransition(AccountStatus.Existed, AccountStatus.Deleted).ConfirmTransition()
                                   .SetTransition(AccountStatus.Blocked, AccountStatus.Deleted).ConfirmTransition()
                                   .ConfirmEvent()
                                   .Build();

            var statorForAccountDuple = Stator <Account, AccountStatus> .InitStator()
                                        .State(x => x.Status)
                                        .ForEvent <UserBlockedEvent>()
                                        .SetTransition(AccountStatus.Existed, AccountStatus.Deleted).ConfirmTransition()
                                        .SetTransition(AccountStatus.Blocked, AccountStatus.Deleted).ConfirmTransition()
                                        .ConfirmEvent()
                                        .Build();

            var statorForRanking = Stator <Ranking, RankingStatus> .InitStator()
                                   .State(x => x.Status)
                                   .ForEvent <UserBlockedEvent>()
                                   .SetTransition(RankingStatus.Tracked, RankingStatus.Untracked).ConfirmTransition()
                                   .ConfirmEvent()
                                   .Build();

            var mobStator =
                MobStatorFactory
                .InitWithStator(statorForUser)
                .AddStateMachine(statorForSubscription)
                .AddStateMachine(statorForAccount)
                .AddStateMachine(statorForAccountDuple)
                .AddStateMachine(statorForRanking)
                .Build();

            return(mobStator);
        }
        /// <inheritdoc />
        public override void UpdateBeforeSimulation100()
        {
            using (Mod.PROFILE ? Profiler.Measure(nameof(SmartRotorSolarHinge), nameof(UpdateBeforeSimulation100)) : null) {
                if (Stator == null || !Stator.IsWorking || Stator.Top == null || Stator.Top.Closed)
                {
                    return;
                }

                var sunDirection = Mod.Static.SunTracker.CalculateSunDirection();
                Stator.PointRotorAtVector(sunDirection, Stator.Top.WorldMatrix.Forward);
            }
        }
 static StatorComplicatedStatesTests()
 {
     _stator = Stator <Order, State> .InitStator()
               .State(x => x.State)
               .ForEvent <OrderCreatedEvent>()
               .SetTransition(new State {
         RawMode = "Created"
     }, new State {
         RawMode = "Delivered"
     }).ConfirmTransition()
               .ConfirmEvent()
               .Build();
 }
Example #14
0
        public StatorTransitionsTests()
        {
            _stator = Stator <User, UserStatus> .InitStator()
                      .State(x => x.Status)

                      .ForEvent <UserStarredEvent>()
                      .SetTransition(UserStatus.Active, UserStatus.Premium).ConfirmTransition()
                      .ConfirmEvent()

                      .ForEvent <UserBlockedEvent>()
                      .SetTransition(UserStatus.Active, UserStatus.Inactive).ConfirmTransition()
                      .SetTransition(UserStatus.Premium, UserStatus.Inactive).ConfirmTransition()
                      .SetTransition(UserStatus.Striked, UserStatus.Deleted).ConfirmTransition()
                      .ConfirmEvent()

                      .Build();
        }
Example #15
0
        static StatorLiftTests()
        {
            var stator = Stator <User, UserStatus> .InitStator()
                         .State(x => x.Status)

                         .ForEvent <UserStarredEvent>()
                         .SetTransition(UserStatus.Active, UserStatus.Premium).ConfirmTransition()
                         .ConfirmEvent()

                         .ForEvent <UserBlockedEvent>()
                         .SetTransition(UserStatus.Active, UserStatus.Inactive).ConfirmTransition()
                         .SetTransition(UserStatus.Premium, UserStatus.Inactive).ConfirmTransition()
                         .SetTransition(UserStatus.Striked, UserStatus.Deleted).ConfirmTransition()

                         .ConfirmEvent()

                         .Build();

            _statorBlockedLift = stator.GetEventLift(new UserBlockedEvent());
        }
Example #16
0
        public void Should_invoke_transition_miss_handlers()
        {
            var exMessage = "TM";

            var stator = Stator <User, UserStatus> .InitStator()
                         .State(x => x.Status)
                         .ForEvent <UserBlockedEvent>()
                         .WithTransitionMissHandler((_, __) => throw new Exception(exMessage))
                         .SetTransition(UserStatus.Active, UserStatus.Inactive)
                         .ConfirmTransition()
                         .ConfirmEvent()
                         .Build();

            var @event = new UserBlockedEvent();
            var user   = new User {
                Status = UserStatus.Deleted
            };

            var ex = Assert.Throws <Exception>(() => stator.Go(user, @event));

            Assert.Equal(exMessage, ex.Message);
        }
Example #17
0
        /// <summary>
        /// A special run for the Enigma. Simulates a key press and returns a result.
        /// </summary>
        /// <param name="input">The character that has been depressed</param>
        /// <returns>The output, i.e the character that will be lit in the lamp</returns>
        public virtual char Run(char input)
        {
            //Rotate the FastRotor
            Rotors[0].Rotate();

            //Get the index of the letter in the alphabet:
            int index = Alphabet.IndexOf(input);

            //Pass the current to the Stator:
            index = Stator.GetPath(index, true);

            //Pass the current through successive rotors:
            for (int i = 0; i < Rotors.Count; i++)
            {
                index = Rotors[i].GetPath(index, true);
            }

            //Pass the current the Reflector
            index = Reflector.GetPath(index, true);

            //Pass through the rotors in reverse:
            for (int i = Rotors.Count - 1; i > -1; i--)
            {
                var rotor = Rotors[i];
                index = rotor.GetPath(index, false);
            }

            //Pass the current through the Stator:
            index = Stator.GetPath(index, false);

            var result = Alphabet[index];

            //perform plugboard simulation:
            if (Plugboard != null)
            {
                result = Plugboard.Simulate(result);
            }
            return(result);
        }
Example #18
0
        /// <summary>
        /// Make a femm model using parameters
        /// This will check if file existed and use parameters the same to this one or not.
        /// If not, build new one
        /// </summary>
        /// <param name="outfile">Output femm model</param>
        /// <param name="original">The original femm model to insert into</param>
        /// <param name="forcebuild">True if build even file existed</param>
        /// <returns>0-OK,1-File existed, analyzed,-1-ERROR</returns>
        public virtual void BuildFEMModel(String outfile, FEMM femm = null)
        {
            // make sure coordinates were calculated
            if (!isPointsCoordCalculated)
            {
                throw new InvalidOperationException("Points must be calculated before make FEM model.");
            }

            if (femm == null)
            {
                femm = FEMM.DefaultFEMM;
            }

            femm.newdocument(FEMM.DocumentType.Magnetic);

            // setup problems params
            femm.mi_probdef(0, FEMM.UnitsType.millimeters, FEMM.ProblemType.planar, 1e-8, GeneralParams.MotorLength, 7, FEMM.ACSolverType.Succ_Approx);

            // build a rotor in femm
            Rotor.BuildInFEMM(femm);

            // build a stator in femm
            Stator.BuildInFEMM(femm);

            // build airgap (put label)
            Airgap.BuildInFEMM(femm);

            // clear selected, refresh, and go to natural zoom
            femm.mi_clearselected();
            femm.mi_zoomnatural();

            femm.mi_saveas(outfile);

            femm.mi_close();

            // write md5 to it
            FEMM.mi_modifyFEMMComment(outfile, GetMD5String());
        }
Example #19
0
        public void Should_check_condition_and_invoke_condition_mismatch_handlers()
        {
            var exMessage = "CF";

            var stator = Stator <User, UserStatus> .InitStator()
                         .State(x => x.Status)
                         .ForEvent <UserBlockedEvent>()
                         .SetTransition(UserStatus.Active, UserStatus.Inactive)
                         .Match((u, e) => e.Args?.Length > 0)
                         .Or((_, __) => throw new Exception(exMessage))
                         .ConfirmTransition()
                         .ConfirmEvent()
                         .Build();

            var @event = new UserBlockedEvent();
            var user   = new User {
                Status = UserStatus.Active
            };

            var ex = Assert.Throws <Exception>(() => stator.Go(user, @event));

            Assert.Equal(exMessage, ex.Message);
        }
Example #20
0
 internal StatorBuilder(Stator <TEntity, TEntityState> stator)
 {
     _stator = stator;
 }
Example #21
0
 public virtual void DrawPreview(Graphics graphics, float Ox, float Oy, float scale)
 {
     Rotor.DrawPreview(graphics, Ox, Oy, scale);
     Stator.DrawPreview(graphics, Ox, Oy, scale);
 }