コード例 #1
0
ファイル: TaskManager.cs プロジェクト: Lenshang/Ptilopsis
        public bool EnableTask(string id, int timeout = 10000)
        {
            PtiEventer addTaskEvent = null;
            var        r            = EventManager.Get().RegEventAndWait <string>(ptievent => {
                var task = this.TaskPool.Where(i => i.PtiTasker._id == id).FirstOrDefault();
                if (task != null)
                {
                    task.PtiTasker.Enable = true;
                    return("1");
                }
                else
                {
                    var _t = DBManager.Get().GetTaskById(id);
                    if (_t == null)
                    {
                        return(null);
                    }
                    _t.Enable       = true;
                    var immediately = false;
                    if (string.IsNullOrWhiteSpace(_t.Schedule))
                    {
                        immediately = true;
                    }
                    addTaskEvent = this.AddTask(_t, null, immediately);
                    return("1");
                }
            }, PtiEventType.DisableTask);

            if (addTaskEvent != null)
            {
                EventManager.Get().WaitEvent <object>(addTaskEvent);
            }
            return(r != null);
        }
コード例 #2
0
 /// <summary>
 /// App Cleaner 定时清理已删除的APP(清除时先判断是否有对应任务在运行)TODO
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 public object Cleaner(PtiEventer value)
 {
     WriteInfo("AppCleaner Running");
     return(true);
 }
コード例 #3
0
ファイル: TaskManager.cs プロジェクト: Lenshang/Ptilopsis
        /// <summary>
        /// 循环遍历所有任务,检查可执行的并且执行
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public object CheckAllTasksEvent(PtiEventer value)
        {
            DateTime now = DateTime.Now;

            foreach (var runtask in this.TaskPool)
            {
                try
                {
                    //判断是否已经禁用任务,从内存中删除任务
                    if (!runtask.PtiTasker.Enable)
                    {
                        this.RemoveList.Add(runtask);
                        continue;
                    }

                    //判断任务运行是否已经超时
                    if (runtask.PtiTasker.TimeOutSeconds > 0)
                    {
                        if ((runtask.LastRunDate - now) >= TimeSpan.FromSeconds(runtask.PtiTasker.TimeOutSeconds))
                        {
                            if (!RunnerManager.Get().CheckTaskAndKill(runtask.PtiTasker))
                            {
                                WriteWarning($"Task {runtask.PtiTasker._id}({runtask.PtiTasker.TaskName}) Kill Failure!");
                            }
                        }
                    }

                    //判断启动时间启动任务
                    if (now >= runtask.NextRunDate)
                    {
                        if (!RunnerManager.Get().CreateAndStart(runtask))
                        {
                            WriteWarning($"Task {runtask.PtiTasker._id}({runtask.PtiTasker.TaskName}) Start Failure!");
                        }

                        //没有任务计划的为一次性任务,执行后标记为失效
                        if (string.IsNullOrWhiteSpace(runtask.PtiTasker.Schedule))
                        {
                            runtask.PtiTasker.Enable = false;
                        }
                        else
                        {
                            runtask.NextRunDate = Schedule.CalculateDateScheduleFromNow(runtask.PtiTasker.Schedule);
                        }
                    }
                }
                catch (Exception e)
                {
                    WriteError(e.ToString());
                }
            }
            foreach (var removetask in this.RemoveList)
            {
                //立即更新任务
                DBManager.Get().SaveTask(removetask.PtiTasker);
                //如果任务还在运行
                if (RunnerManager.Get().TaskExist(removetask.Runner))
                {
                    continue;
                }
                //在内存中移除任务
                if (!this.TaskPool.Remove(removetask))
                {
                    WriteWarning($"Task {removetask.PtiTasker._id}({removetask.PtiTasker.TaskName}) remove failure!");
                }
            }
            this.RemoveList = new List <PtiRunTask>();
            WriteInfo("Check All Tasks Success");
            return(true);
        }
コード例 #4
0
ファイル: TaskManager.cs プロジェクト: Lenshang/Ptilopsis
 /// <summary>
 /// 将任务同步至数据库
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 public object SyncDatabaseEvent(PtiEventer value)
 {
     DBManager.Get().SaveAllTasksAndApps(this.TaskPool);
     WriteInfo("Database Synchronized!");
     return(true);
 }