private void DrawRules(NodeConnection connection, TransitionRule rule) { Rect rect = EditorGUILayout.BeginHorizontal(); var variableNames = graph.variables.Select(x => x.name).ToArray(); var currentVariableIndex = Array.IndexOf(variableNames, rule.Variable.name); var variableIndex = EditorGUILayout.Popup(currentVariableIndex, variableNames); if (variableIndex != currentVariableIndex) { rule.Variable = graph.variables[variableIndex]; // rule.VariableName = rule.Variable.name; } switch (rule.Variable.VariableType) { case VariableType.Trigger: rule.Qualifier = Qualifier.Equal; rule.QualifierIntVal = 1; break; case VariableType.Boolean: rule.QualifierBoolEnum = (TrueFalse)EditorGUILayout.EnumPopup(rule.QualifierBoolEnum); rule.QualifierIntVal = (int)rule.QualifierBoolEnum; rule.Qualifier = Qualifier.Equal; break; case VariableType.Float: rule.Qualifier = (Qualifier)EditorGUILayout.EnumPopup(rule.Qualifier); rule.QualifierFloatVal = EditorGUILayout.FloatField(rule.QualifierFloatVal); break; case VariableType.Integer: rule.Qualifier = (Qualifier)EditorGUILayout.EnumPopup(rule.Qualifier); rule.QualifierIntVal = EditorGUILayout.IntField(rule.QualifierIntVal); break; } if (GUILayout.Button("x", EditorStyles.miniButton, GUILayout.Width(23)) && ConfirmRemoveRule()) { connection.RemoveRule(rule); return; } EditorGUILayout.EndHorizontal(); }
public async Task <IActionResult> CreateTree(RequestViewModel model) { if (model is null) { return(Json("Lỗi: sai cấu hình dữ liệu")); } Process new_process = new Process { Name = "test", Actions = new List <Models.Action>(), Nodes = new List <Node>(), Activities = new List <Activity>(), Roles = new List <Role>(), Rules = new List <TransitionRule>() }; if (model.Process.Nodes is null) { return(Json("Lỗi: sai cấu trúc dữ liệu")); } foreach (var node in model.Process.Nodes) { Node new_node = new Node { Name = node.Name, Activities = new List <Activity>(), Description = node.Description, Level = node.Level, Roles = new List <Role>(), Actions = node.Actions, Childs = new List <Node>() }; if (node.Activities != null) { foreach (var activity in node.Activities) { Activity new_activity = new Activity { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Roles = new List <Role>(), IsRequired = true, Duration = activity.Duration, Data = new List <Data>(), AbsentName = activity.AbsentName, ApproverName = activity.ApproverName, DayOff = activity.DayOff, IsReallyNotApproved = activity.IsReallyNotApproved, Reason = activity.Reason, CampaignName = activity.CampaignName, IsRunning = activity.IsRunning }; if (activity.Roles != null) { foreach (var role in activity.Roles) { Role temp = new Role { Name = role.Name }; new_activity.Roles.Add(temp); new_process.Roles.Add(temp); } new_node.Activities.Add(new_activity); } new_process.Activities.Add(new_activity); } new_process.Nodes.Add(new_node); } } if (model.Process.Rules is null) { return(Json("Lỗi: sai cấu trúc dữ liệu")); } foreach (var action in model.Process.Actions) { var new_action = new Models.Action { Name = action.Name, Description = action.Description }; new_process.Actions.Add(new_action); } foreach (var rule in model.Process.Rules) { var new_rule = new TransitionRule { Action = new_process.Actions.FirstOrDefault(a => a.Name == rule.Action), CurrentNode = new_process.Nodes.FirstOrDefault(s => s.Name == rule.CurrentNode), NextNode = new_process.Nodes.FirstOrDefault(s => s.Name == rule.NextNode) }; new_process.Rules.Add(new_rule); } Models.Request new_request = new Request { CurrentNode = new_process.Nodes.FirstOrDefault(n => n.Level == 0), Data = null, Histories = null, Process = new_process, Tasks = null, Title = model.Title, UserName = "******" }; var client = new HttpClient(); var content = new StringContent(JsonConvert.SerializeObject(new_request), Encoding.UTF8, "application/json"); var result = await client.PostAsync("http://" + Configuration["url"] + ":88/api/v1/requests/tree/", content); if (!result.IsSuccessStatusCode) { return(Json("Lỗi: không tìm thấy máy chủ")); } return(Json(new_request)); }
static void Main(string[] args) { var niceAcceptor = new FiniteStateMachine <string, char>( "", new List <string> { "", "n", "ni", "nic", "nice", "rejected" }, new TransitionRuleset <string, char>( (("", 'n'), "n"), (("n", 'i'), "ni"), (("ni", 'c'), "nic"), (("nic", 'e'), "nice"), "rejected"//last resort, default rule if nothing else applies transition to 5 (reject state) ), new List <string> { "nice" } ); var endsWithZeroAcceptor = new FiniteStateMachine <int, int>( 0, new List <int> { 0, // doesn't end with zero 1, // ends with zero }, new TransitionRuleset <int, int>( TransitionRule <int, int> .StateAgnostic(0, 1), // zero takes you to the accept state TransitionRule <int, int> .StateAgnostic(1, 0) // one takes you to the reject state ), new List <int> { 1 } ); var evenNumberOfZerosAcceptor = new FiniteStateMachine <int, int>( 0, new List <int> { 0, // is even 1, // is odd }, new TransitionRuleset <int, int>( TransitionRule <int, int> .Regular(0, 0, 1), // Adding a zero while the number of zeros is even makes the number of zeros odd TransitionRule <int, int> .Regular(1, 0, 0) // Adding a zero while the number of zeros is odd makes the number of zeros even ), new List <int> { 0 } ); var oddNumberOfOnesAcceptor = new FiniteStateMachine <int, int>( 0, new List <int> { 0, // is even 1, // is odd }, new TransitionRuleset <int, int>( TransitionRule <int, int> .Regular(0, 1, 1),// Same as above TransitionRule <int, int> .Regular(1, 1, 0) ), new List <int> { 1 } ); string input; try { while (true) { Console.Clear(); Console.WriteLine("Which task would you like to execute? Use a finite state machine to"); Console.WriteLine(" 0: test if an input is the string 'nice'."); Console.WriteLine(" 1: test if a binary input ends with 0."); Console.WriteLine(" 2: test if a binary input has an even number of 0s."); Console.WriteLine(" 3: test if a binary input has an odd number of 1s."); switch (int.Parse(Console.ReadLine())) { case 0: Console.Clear(); Console.Write("Type a string of letters: "); input = Console.ReadLine(); Console.WriteLine("The string you typed is" + (niceAcceptor.Accepts(input) ? "" : "n't") + " the word 'nice'. (press any key to continue...)"); Console.ReadKey(); break; case 1: Console.Clear(); Console.Write("Type a string of 0s and 1s: "); input = Console.ReadLine(); Console.WriteLine("The string you typed " + (endsWithZeroAcceptor.Accepts(input.ToCharArray().Select(x => x - '0')) ? "ends" : "doesn't end") + " with a 0. (press any key to continue...)"); Console.ReadKey(); break; case 2: Console.Clear(); Console.Write("Type a string of 0s and 1s: "); input = Console.ReadLine(); Console.WriteLine("The string you typed has an " + (evenNumberOfZerosAcceptor.Accepts(input.ToCharArray().Select(x => x - '0')) ? "even" : "odd") + " number of 0s. (press any key to continue...)"); Console.ReadKey(); break; case 3: Console.Clear(); Console.Write("Type a string of 0s and 1s: "); input = Console.ReadLine(); Console.WriteLine("The string you typed has an " + (oddNumberOfOnesAcceptor.Accepts(input.ToCharArray().Select(x => x - '0')) ? "odd" : "even") + " number of 1s. (press any key to continue...)"); Console.ReadKey(); break; default: Console.WriteLine("Unrecognized input. (press any key to continue...)"); Console.ReadKey(); break; } } } catch { Console.WriteLine("Invalid input."); } }
public async Task <IActionResult> Create(RequestViewModel model) { if (model is null) { return(Json("Lỗi: sai cấu hình dữ liệu")); } Process new_process = new Process { Name = "test", Actions = new List <Models.Action>(), States = new List <State>(), Activities = new List <Activity>(), Roles = new List <Role>(), Rules = new List <TransitionRule>() }; if (model.Process.States is null) { return(Json("Lỗi: sai cấu trúc dữ liệu")); } foreach (var state in model.Process.States) { State new_state = new State { Name = state.Name, Activities = new List <Activity>(), Description = "", StateType = state.StateType, Roles = new List <Role>(), ETA = state.ETA }; if (state.Activities != null) { foreach (var activity in state.Activities) { Activity new_activity = new Activity { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Roles = new List <Role>(), IsRequired = true, Duration = activity.Duration, Data = new List <Data>(), AbsentName = activity.AbsentName, ApproverName = activity.ApproverName, DayOff = activity.DayOff, IsReallyNotApproved = activity.IsReallyNotApproved, Reason = activity.Reason, CampaignName = activity.CampaignName, IsRunning = activity.IsRunning }; if (activity.Roles != null) { foreach (var role in activity.Roles) { Role temp = new Role { Name = role.Name }; new_activity.Roles.Add(temp); new_process.Roles.Add(temp); } new_state.Activities.Add(new_activity); } new_process.Activities.Add(new_activity); } new_process.States.Add(new_state); } } if (model.Process.Rules is null) { return(Json("Lỗi: sai cấu trúc dữ liệu")); } foreach (var action in model.Process.Actions) { var new_action = new Models.Action { Name = action.Name, Description = action.Description }; new_process.Actions.Add(new_action); } var trigger = new Trigger { Consequence = new Consequence { Method = "AddContact", Name = "Campaign" }, Events = new List <Event> { new Event { Conditions = new List <Condition> { new Condition { Operator = "GreaterOrEqual", Param = "Age", Threshold = "18", Type = "Integer" } }, Name = "Must be 18 or above to enter this campaign" } } }; foreach (var rule in model.Process.Rules) { var new_rule = new TransitionRule { Action = new_process.Actions.FirstOrDefault(a => a.Name == rule.Action), CurrentState = new_process.States.FirstOrDefault(s => s.Name == rule.CurrentState), NextState = new_process.States.FirstOrDefault(s => s.Name == rule.NextState) }; if (new_rule.CurrentState.Activities[0].ActivityType == ActivityType.Campaign) { new_rule.Trigger = trigger; } new_process.Rules.Add(new_rule); } Models.Request new_request = new Request { CurrentState = new_process.States.First(), Data = null, Histories = null, Process = new_process, Tasks = null, Title = model.Title, UserName = "******" }; var client = new HttpClient(); var content = new StringContent(JsonConvert.SerializeObject(new_request), Encoding.UTF8, "application/json"); var result = await client.PostAsync("http://" + Configuration["url"] + ":88/api/v1/requests/", content); if (!result.IsSuccessStatusCode) { return(Json("Lỗi: không tìm thấy máy chủ")); } return(Json(new_request)); }
public static Model.Request NodeCreateFlow(RequestCreateModel model1, Process process) { if (model1 is null) { return(null); } if (model1.Process is null) { return(null); } process.Actions = new List <Models.Action>(); process.States = new List <State>(); process.Rules = new List <TransitionRule>(); process.Roles = new List <Role>(); process.Activities = new List <Activity>(); process.Nodes = new List <Node>(); foreach (var node in model1.Process.Nodes) { Node new_node = new Node { Level = node.Level, Name = node.Name, Description = node.Description, Activities = new List <Activity>(), Iscompleted = node.Iscompleted, Roles = new List <Role>(), Actions = new List <Models.Action>(), Childs = new List <Node>() }; if (node.Actions != null) { foreach (var action in node.Actions) { var new_action = new Models.Action { Name = action.Name, Description = action.Description }; new_node.Actions.Add(new_action); process.Actions.Add(new_action); } } foreach (var activity in node.Activities) { if (activity.ActivityType == ActivityType.Email) { Activity new_activity = new EmailActivityOperator { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Duration = activity.Duration, IsRequired = activity.IsRequired, Discriminator = "EMAIL", Roles = new List <Role>(), Data = new List <Data>() }; if (activity.Roles != null) { foreach (var role in activity.Roles) { Role new_role = new Role { Name = role.Name }; process.Roles.Add(new_role); new_activity.Roles.Add(new_role); new_node.Roles.Add(new_role); } process.Activities.Add(new_activity); new_node.Activities.Add(new_activity); } } else if (activity.ActivityType == ActivityType.Absent) { Activity new_activity = new TLActivityOperator { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Duration = activity.Duration, IsRequired = activity.IsRequired, Discriminator = "TALENT-LEAVE", Roles = new List <Role>(), Data = new List <Data>(), AbsentName = activity.AbsentName, ApproverName = activity.ApproverName, DayOff = activity.DayOff, IsReallyNotApproved = activity.IsReallyNotApproved, Reason = activity.Reason }; if (activity.Roles != null) { foreach (var role in activity.Roles) { Role new_role = new Role { Name = role.Name }; process.Roles.Add(new_role); new_activity.Roles.Add(new_role); new_node.Roles.Add(new_role); } process.Activities.Add(new_activity); new_node.Activities.Add(new_activity); } } else if (activity.ActivityType == ActivityType.Generic) { Activity new_activity = new GenericActivityOperator { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Duration = activity.Duration, IsRequired = activity.IsRequired, Roles = new List <Role>(), Data = new List <Data>(), }; if (activity.Roles != null) { foreach (var role in activity.Roles) { Role new_role = new Role { Name = role.Name }; process.Roles.Add(new_role); new_activity.Roles.Add(new_role); new_node.Roles.Add(new_role); } process.Activities.Add(new_activity); new_node.Activities.Add(new_activity); } } else if (activity.ActivityType == ActivityType.Campaign) { Activity new_activity = new CampaignActivityOperator { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Duration = activity.Duration, IsRequired = activity.IsRequired, CampaignName = activity.CampaignName, Subscribers = new List <Contact>(), IsRunning = activity.IsRunning, Roles = new List <Role>(), Data = new List <Data>(), Discriminator = "CAMPAIGN" }; // if (activity.Subscribers != null) // { // foreach (var item in activity.Subscribers) // { // ((CampaignActivityOperator)new_activity).Subscribers.Add(new Contact { // FullName = item.FullName, // Email = item.Email, // PhoneNumber = item.PhoneNumber, // Age = item.Age, // DataType = DataType.Contact // }) // } // } if (activity.Roles != null) { foreach (var role in activity.Roles) { Role new_role = new Role { Name = role.Name }; process.Roles.Add(new_role); new_activity.Roles.Add(new_role); new_node.Roles.Add(new_role); } process.Activities.Add(new_activity); new_node.Activities.Add(new_activity); } } } process.Nodes.Add(new_node); } if (model1.Process.Rules != null) { foreach (var rule in model1.Process.Rules) { TransitionRule new_rule = new TransitionRule { CurrentNode = process.Nodes.FirstOrDefault(s => s.Name == rule.CurrentNode.Name), NextNode = process.Nodes.FirstOrDefault(s => s.Name == rule.NextNode.Name), Action = process.Actions.FirstOrDefault(a => a.Name == rule.Action.Name) }; process.Rules.Add(new_rule); } } var new_request = new Model.Request { Title = model1.Title, UserId = model1.UserId, UserName = model1.UserName, CurrentNode = process.Nodes.FirstOrDefault(s => s.Level == 0), DateRequested = model1.DateRequested, Histories = new List <ActivityLog>(), Tasks = new List <Model.Task>(), Data = new List <Data>() }; new_request.Process = process; new_request.Tasks = new List <Model.Task>(); foreach (var activity in process.Activities) { new_request.Tasks.Add(new Model.Task { Activity = activity, IsDone = false }); } return(new_request); }
public static Model.Request CreateFlow(RequestCreateModel model1) { if (model1 is null) { return(null); } if (model1.Process is null) { return(null); } Process new_process = new Process { Name = model1.Process.Name, Actions = new List <Models.Action>(), States = new List <State>(), Rules = new List <TransitionRule>(), Roles = new List <Role>(), Activities = new List <Activity>() }; foreach (var state in model1.Process.States) { State new_state = new State { StateType = state.StateType, Name = state.Name, Description = state.Description, Activities = new List <Activity>(), Roles = new List <Role>(), ETA = state.ETA }; foreach (var activity in state.Activities) { if (activity.ActivityType == ActivityType.Email) { Activity new_activity = new EmailActivityOperator { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Duration = activity.Duration, IsRequired = activity.IsRequired, Discriminator = "EMAIL", Roles = new List <Role>(), Data = new List <Data>() }; if (activity.Roles != null) { foreach (var role in activity.Roles) { Role new_role = new Role { Name = role.Name }; new_process.Roles.Add(new_role); new_activity.Roles.Add(new_role); } new_process.Activities.Add(new_activity); new_state.Activities.Add(new_activity); } } else if (activity.ActivityType == ActivityType.Absent) { Activity new_activity = new TLActivityOperator { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Duration = activity.Duration, IsRequired = activity.IsRequired, Discriminator = "TALENT-LEAVE", Roles = new List <Role>(), Data = new List <Data>(), AbsentName = activity.AbsentName, ApproverName = activity.ApproverName, DayOff = activity.DayOff, IsReallyNotApproved = activity.IsReallyNotApproved, Reason = activity.Reason }; if (activity.Roles != null) { foreach (var role in activity.Roles) { Role new_role = new Role { Name = role.Name }; new_process.Roles.Add(new_role); new_activity.Roles.Add(new_role); new_state.Roles.Add(new_role); } new_process.Activities.Add(new_activity); new_state.Activities.Add(new_activity); } } else if (activity.ActivityType == ActivityType.Generic) { Activity new_activity = new GenericActivityOperator { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Duration = activity.Duration, IsRequired = activity.IsRequired, Roles = new List <Role>(), Data = new List <Data>(), }; if (activity.Roles != null) { foreach (var role in activity.Roles) { Role new_role = new Role { Name = role.Name }; new_process.Roles.Add(new_role); new_activity.Roles.Add(new_role); new_state.Roles.Add(new_role); } new_process.Activities.Add(new_activity); new_state.Activities.Add(new_activity); } } else if (activity.ActivityType == ActivityType.Campaign) { Activity new_activity = new CampaignActivityOperator { ActivityType = activity.ActivityType, Name = activity.Name, Description = activity.Description, Duration = activity.Duration, IsRequired = activity.IsRequired, CampaignName = activity.CampaignName, Subscribers = new List <Contact>(), IsRunning = activity.IsRunning, Roles = new List <Role>(), Data = new List <Data>(), Discriminator = "CAMPAIGN" }; // if (activity.Subscribers != null) // { // foreach (var item in activity.Subscribers) // { // ((CampaignActivityOperator)new_activity).Subscribers.Add(new Contact { // FullName = item.FullName, // Email = item.Email, // PhoneNumber = item.PhoneNumber, // Age = item.Age, // DataType = DataType.Contact // }) // } // } if (activity.Roles != null) { foreach (var role in activity.Roles) { Role new_role = new Role { Name = role.Name }; new_process.Roles.Add(new_role); new_activity.Roles.Add(new_role); new_state.Roles.Add(new_role); } new_process.Activities.Add(new_activity); new_state.Activities.Add(new_activity); } } } new_process.States.Add(new_state); } if (model1.Process.Actions != null) { foreach (var action in model1.Process.Actions) { var new_action = new Models.Action { Name = action.Name, Description = action.Description }; new_process.Actions.Add(new_action); } } if (model1.Process.Rules != null) { foreach (var rule in model1.Process.Rules) { TransitionRule new_rule = new TransitionRule { CurrentState = new_process.States.FirstOrDefault(s => s.Name == rule.CurrentState.Name), NextState = new_process.States.FirstOrDefault(s => s.Name == rule.NextState.Name), Action = new_process.Actions.FirstOrDefault(a => a.Name == rule.Action.Name) }; // if (rule.Trigger != null) { // var new_trigger = new Trigger { // Consequence = rule.Trigger.Consequence, // Events = rule.Trigger.Events // }; // new_rule.Trigger = new_trigger; // } new_process.Rules.Add(new_rule); } } var new_request = new Model.Request { Title = model1.Title, UserId = model1.UserId, UserName = model1.UserName, CurrentState = new_process.States.FirstOrDefault(s => s.StateType == StateType.start), DateRequested = model1.DateRequested, Histories = new List <ActivityLog>(), Tasks = new List <Model.Task>(), Data = new List <Data>() }; new_request.Process = new_process; new_request.Tasks = new List <Model.Task>(); foreach (var activity in new_process.Activities) { new_request.Tasks.Add(new Model.Task { Activity = activity, IsDone = false }); } return(new_request); }
public void SetTransitionRule(TransitionRule rule) { }
void LateUpdate() { TransitionRule chosenTransition = null; for (int i = 0; i < GlobalState.Length; ++i) { TransitionRule tr = GlobalState [i]; if (tr != null && (chosenTransition == null || tr.Priority > chosenTransition.Priority) && (tr.Cond != null && (tr.Not ^ tr.Cond.IsSatisfied(current != null ? current.State : null, tr.Next)))) { chosenTransition = tr; } } if (current != null && current.Transitions != null) { for (int i = 0; i < current.Transitions.Length; ++i) { TransitionRule tr = current.Transitions [i]; if (tr != null && (chosenTransition == null || tr.Priority > chosenTransition.Priority) && (tr.Cond != null && (tr.Not ^ tr.Cond.IsSatisfied(current != null ? current.State : null, tr.Next)))) { chosenTransition = tr; } } } if (chosenTransition != null) { leaveCurrentState(); // lazy getting current = chosenTransition.StateEntityOfNext; if (current == null) { foreach (StateEntity se in States) { if (se != null && chosenTransition.Next == se.State) { chosenTransition.StateEntityOfNext = se; current = se; break; } } if (current == null) { // We have reached a state not enlisted in FsmCore. current = new StateEntity(); current.State = chosenTransition.Next; current.Transitions = null; } } enterCurrentState(); } }