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); }
static StatorResilienceTests() { _stator = Stator <Order, State> .InitStator() .State(x => x.State) .ForEvent <OrderCreatedEvent>() .SetTransition(default, new State {
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); }
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); }
void MyWheel_IsWorkingChanged(MyCubeBlock obj) { if (Stator != null) { Stator.UpdateIsWorking(); } }
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; }
/// <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); }
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; }
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); }
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(); }
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(); }
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()); }
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); }
/// <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); }
/// <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()); }
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); }
internal StatorBuilder(Stator <TEntity, TEntityState> stator) { _stator = stator; }
public virtual void DrawPreview(Graphics graphics, float Ox, float Oy, float scale) { Rotor.DrawPreview(graphics, Ox, Oy, scale); Stator.DrawPreview(graphics, Ox, Oy, scale); }