예제 #1
0
 private Connector(FlowObj flow, TaskObj taskFrom, Pin pinFrom, TaskObj taskTo, Pin pinTo)
 {
     Flow     = flow;
     TaskFrom = taskFrom;
     PinFrom  = pinFrom;
     TaskTo   = taskTo;
     PinTo    = pinTo;
     if (flow.Route != null)
     {
         points = new List <Point>();
         var iterator = flow.Route.GetEnumerator();
         while (iterator.MoveNext())
         {
             var x = (int)iterator.Current;
             if (!iterator.MoveNext())
             {
                 Debug.WriteLine("Odd number of route coordinates, ignoring - {0}:{1}", taskFrom.TaskId, flow.Name);
                 Points = null;
                 break;
             }
             var y = (int)iterator.Current;
             points.Add(new Point(x, y));
         }
     }
     Bounds = GetBounds();
     connectors.Add(this);
 }
예제 #2
0
 /// <summary>
 /// Create a Shape for an existing task
 /// </summary>
 /// <param name="task"></param>
 private static void CreateShape(TaskObj task)
 {
     if (task.Symbol.Shape == null)
     {
         var datum = GridSnap(new Point(task.Symbol.LocationX, task.Symbol.LocationY));
         task.Symbol.Shape = Shape.Create(task.Symbol.Style, task, datum);
     }
 }
예제 #3
0
        public ActionResult ShowTask(TasksManager od, string check)
        {
            TaskObj task = new TaskObj();

            if (check == "on")
            {
                od.Status = true;
                NotificationObj.Add(new Notification {
                    AspNetUserId = Guid.Parse("3950eec4-39b4-4b16-a4e7-c7e7e3f978c8"), Url = Url.Content("~/Task/Index"), Status = false, Message = "Данный пользователь" + obj.ViewUserName(od.UserId).UserName + " выполнил задания."
                });
            }
            obj.Edit(od);
            return(RedirectToAction("Calendar"));
        }
예제 #4
0
        public static Shape Create(string style, TaskObj task, Point datumLocation)
        {
            switch (style.ToLower())
            {
            case "circle":
                return(new CircleShape(task, datumLocation));

            case "box":
                return(new BoxShape(task, datumLocation));

            default:
                throw new ApplicationException("Unknown shape style: " + style);
            }
        }
예제 #5
0
 internal CircleShape(TaskObj task, Point datumLocation)
     : base(task)
 {
     InitShape(80, 80, datumLocation);
 }
            static bool Prefix(CaiQuanGame __instance, CaiQuanType playerType, CaiQuanType npcType, ICaiQuanAction ___caiQuanAction, TaskObj ___taskObj)
            {
                if (true || !enabled)
                {
                    return(true);
                }

                PropertyInfo property = typeof(CaiQuanGame).GetProperty("isGaming");

                property.DeclaringType.GetProperty("isGaming");
                property.SetValue(__instance, true, BindingFlags.NonPublic | BindingFlags.Instance, null, null, null);

                ___caiQuanAction.DoPlayerCaiQuanAnim(playerType);
                ___caiQuanAction.DoNpcCaiQuanAnim(npcType);

                MethodInfo m_EndAnim = __instance.GetType().GetMethod("EndAnim", BindingFlags.NonPublic | BindingFlags.Instance);

                void m_EndAnimInvoke()
                {
                    m_EndAnim.Invoke(__instance, new object[] { });
                }

                ___taskObj = Singleton <TaskRunner> .Instance.RunDelayTask(2f / settings.RPCSpeed, false, new Action(m_EndAnimInvoke));

                return(false);
            }
예제 #7
0
 protected Shape(TaskObj task)
 {
     Task = task;
 }
예제 #8
0
        private void Button_Click(object sender, EventArgs e)
        {
            TaskObj task = new TaskObj(fdeadline.Text, date.Text, autor.Text, priority.Text);

            MessageBox.Show(task.autor);
        }
예제 #9
0
        // Offset to shape Top Left from Bounds

        internal BoxShape(TaskObj task, Point datumLocation) : base(task)
        {
            InitShape(120, 80, datumLocation);
        }
예제 #10
0
 // Get the connectors connected to a task
 public static IEnumerable <Connector> GetConnections(TaskObj task)
 {
     return(Connectors.Where(c => c.TaskFrom == task || c.TaskTo == task));
 }
예제 #11
0
        /// <summary>
        /// Create a task, its symbol data and shape when a Palette symbol is dropped on the diagram
        /// </summary>
        /// <param name="symbolType"></param>
        /// <param name="datum"></param>
        public TaskObj CreateTask(PaletteObj symbolType, Point datum)
        {
            var symbolTask = symbolType.Task;

            if (symbolTask.ActivityName == "cleanup" && Model.Workflow.Tasks.Any(t => t.ActivityName == "cleanup"))
            {
                MessageBox.Show("No more than one Cleanup Start symbol permitted");
                return(null);
            }
            ActivityObj activity = null;

            if (symbolTask.HasActivity())
            {
                var json = RestClient.Get($"/activities/{symbolTask.ActivityName}/versions/{symbolTask.ActivityVersion}");
                activity = JsonConvert.DeserializeObject <ActivityObj>(json);

                if (activity == null)
                {
                    MessageBox.Show($"Missing activity - {symbolTask.ActivityName} {symbolTask.ActivityVersion}", "Database error");
                    return(null);
                }
            }

            var task = new TaskObj
            {
                TaskId          = Guid.NewGuid().ToString().Substring(0, 8),
                ActivityName    = symbolTask.ActivityName,
                ActivityVersion = symbolTask.ActivityVersion,
                Outflows        = (from f in symbolTask.Outflows
                                   select new FlowObj {
                    Name = f.Name
                }).ToArray(),
                Symbol      = CloneSymbol(symbolTask.Symbol),
                FailOutflow = new FlowObj {
                    Name = "Err"
                },
                HiddenProperties = symbolTask.HiddenProperties
            };

            if (activity != null)
            {
                task.Inputs = new InputCollection(activity.Inputs);
                if (task.Outflows.Length != 0)
                {
                    task.Outputs = new OutputCollection(activity.Outputs);
                }
            }

            // Override or add inputs with data from palette symbol
            if (symbolTask.Inputs != null)
            {
                foreach (var input in symbolTask.Inputs)
                {
                    task.Inputs[input.Key] = input.Value;
                }
            }

            // Override or add outputs with data from palette symbol
            if (symbolTask.Outputs != null)
            {
                foreach (var output in symbolTask.Outputs)
                {
                    task.Outputs[output.Key] = output.Value;
                }
            }

            task.Symbol.Shape = Shape.Create(task.Symbol.Style, task, datum);

            if (symbolTask.HasFailOutflow())
            {
                task.FailOutflow = new FlowObj {
                    Name = "Err"
                };
            }

            Model.Workflow.Tasks.Add(task);
            task.TaskChanged += UpdateGraphics;

            return(task);
        }
예제 #12
0
파일: Decider.cs 프로젝트: malooba/flow
        /// <summary>
        /// Generate JSON for activity inputs and outflows
        /// </summary>
        /// <param name="execution"></param>
        /// <param name="task"></param>
        /// <returns></returns>
        private static JObject GetTaskInput(Execution execution, TaskObj task)
        {
            // Add outflows from task definition
            var inputs = new JObject(new JProperty("$outflows", new JArray(from o in task.Outflows select o.Name)));

            if (task.Inputs == null)
            {
                return(inputs);
            }

            // Lookup input values and add them
            foreach (var input in task.Inputs)
            {
                JToken value = null;

                // Is the input from a variable?
                if (!string.IsNullOrWhiteSpace(input.Value.Var))
                {
                    var variable = execution.Variables.Single(v => v.Name == input.Value.Var);

                    // Does the variable have some content?
                    if (!string.IsNullOrWhiteSpace(variable?.Json))
                    {
                        value = JToken.Parse(variable.Json);
                        if (!string.IsNullOrWhiteSpace(input.Value.Path))
                        {
                            value = value.SelectToken(input.Value.Path);

                            // If required and the path target does not exist
                            // There is no error if the path target exists and is explicitly null - JValue.CreateNull()
                            if (value == null)
                            {
                                if (input.Value.Required)
                                {
                                    throw new ApplicationException($"Uninitialised required input - {input.Value.Var}[{input.Value.Path}] for task: {task.TaskId}");
                                }

                                value = input.Value.Default;
                            }
                        }
                    }
                    else if (!string.IsNullOrWhiteSpace(input.Value.Path))
                    {
                        if (input.Value.Required)
                        {
                            throw new ApplicationException($"Uninitialised required input - {input.Value.Var}[{input.Value.Path}] for task: {task.TaskId}");
                        }

                        value = input.Value.Default;
                    }
                    else
                    {
                        value = JValue.CreateNull();
                    }
                }
                else if (input.Value.Lit != null)
                {
                    value = input.Value.Lit;
                }

                // TODO: Check datatypes for validity

                inputs.Add(input.Key, value);
            }
            return(inputs);
        }
예제 #13
0
파일: Decider.cs 프로젝트: malooba/flow
        /// <summary>
        /// Create a task scheduled event and add it to the decision list
        /// </summary>
        /// <param name="db"></param>
        /// <param name="execution"></param>
        /// <param name="task"></param>
        /// <param name="decisions"></param>
        private static void CreateTaskScheduledEvent(Database db, Execution execution, TaskObj task, ICollection <History> decisions)
        {
            var act = db.GetActivity(task.ActivityName, task.ActivityVersion);

            var input    = GetTaskInput(execution, task);
            var activity = JsonConvert.DeserializeObject <ActivityObj>(act.Json);
            var atse     = new ActivityTaskScheduledEvent
            {
                ActivityId             = Guid.NewGuid().ToString(),
                ActivityName           = task.ActivityName,
                ActivityVersion        = task.ActivityVersion,
                TaskList               = task.TaskList ?? activity.DefaultTaskList, // TODO: Should this be overridable in the task definition? Probably!
                TaskId                 = task.TaskId,
                AsyncSignal            = task.AsyncSignal,
                TaskPriority           = task.TaskPriority ?? activity.DefaultPriority ?? 0,
                HeartbeatTimeout       = (int?)(task.HeartbeatTimeout ?? activity.DefaultTaskHeartbeatTimeout),
                ScheduleToCloseTimeout = (int?)(task.ScheduleToCloseTimeout ?? activity.DefaultTaskScheduleToCloseTimeout),
                ScheduleToStartTimeout = (int?)(task.ScheduleToStartTimeout ?? activity.DefaultTaskScheduleToStartTimeout),
                StartToCloseTimeout    = (int?)task.StartToCloseTimeout,
                Input = input
            };

            decisions.Add(atse);
        }