コード例 #1
0
ファイル: QuartzFactory.cs プロジェクト: radtek/HighpinQuartz
        private IList <PlugModel> GetFileModel()
        {
            string runroot = AppDomain.CurrentDomain.BaseDirectory;
            var    subDir  = Directory.GetDirectories(runroot);
            IOConfigurationReader configurationReader = IOConfigurationReader.GetInstance();
            IList <PlugModel>     list = new List <PlugModel>();

            foreach (var item in subDir)
            {
                string    filename     = new DirectoryInfo(item).Name;
                PlugModel model        = new PlugModel();
                string    plugNamepath = Path.Combine(item, string.Concat(filename, "Plug.txt"));
                if (!File.Exists(plugNamepath))
                {
                    continue;
                }
                var plugdic = configurationReader.Read(plugNamepath);
                model.JobName   = plugdic["JOBNAME"];
                model.GroupName = plugdic["GROUPNAME"];
                string CronexPression = string.Empty;
                if (plugdic.TryGetValue("CRONEXPRESSION", out CronexPression))
                {
                    model.CronexPression = CronexPression;
                }
                else
                {
                    model.TimeSpan = int.Parse(plugdic["TIMESPAN"]);
                }
                model.DllRelativeDir = plugdic["JOBNAME"];
                model.DllIQuartzServiceImplementFile = string.Concat(plugdic["JOBNAME"], "QuartzTask.dll");
                list.Add(model);
            }
            return(list);
        }
コード例 #2
0
ファイル: QuartzBuilder.cs プロジェクト: radtek/HighpinQuartz
        /// <summary>
        /// 成功返回true ,false 失败有可能是已经存在或找不到jobname
        /// </summary>
        /// <param name="jobName"></param>
        /// <returns></returns>
        public IQuartzTask Add(string jobName)
        {
            if (this.QuartzSchedule == null || String.IsNullOrWhiteSpace(jobName))
            {
                return(null);
            }
            string dllName = jobName + "QuartzTask.dll";
            string path    = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, jobName, dllName);

            string plugName     = string.Concat(jobName, "Plug.txt");
            string plugNamepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, jobName, plugName);
            var    plugdic      = configurationReader.Read(plugNamepath);

            byte[]   assemblyBuf = File.ReadAllBytes(path);
            Assembly assembly    = Assembly.Load(assemblyBuf);

            Type type = assembly.GetType(Path.GetFileNameWithoutExtension(dllName) + "." + jobName);

            if (type.GetInterface("IQuartzService") != null)
            {
                QuartzModel           model         = null;
                AssemblyDynamicLoader dyNamicLoader = new AssemblyDynamicLoader(jobName);
                dyNamicLoader.LoadAssembly(path);

                TaskBase task = new TaskBase();
                IDictionary <string, object> dic = task.map;
                dic.Add("DyNamicLoader", dyNamicLoader);
                dic.Add("DyNamicMethod", Path.GetFileNameWithoutExtension(dllName) + "." + jobName);
                string timePression     = "";
                long   timelongPression = 1000;
                bool   bl = false;
                bl = plugdic.TryGetValue("CRONEXPRESSION", out timePression);
                if (!bl)
                {
                    if (plugdic.TryGetValue("TIMESPAN", out timePression))
                    {
                        if (!long.TryParse(timePression, out timelongPression))
                        {
                            timePression = "1000";
                        }
                    }
                }

                IJobDetail job = JobBuilder.Create(task.GetType())
                                 .WithIdentity(plugdic["JOBNAME"], plugdic["GROUPNAME"])
                                 .UsingJobData(new JobDataMap(dic))
                                 .Build();

                TriggerBuilder triggerBuilder = TriggerBuilder.Create()
                                                .WithIdentity(plugdic["JOBNAME"] + "TRIGGER", plugdic["GROUPNAME"])
                                                .StartNow();
                if (bl)
                {
                    triggerBuilder.WithCronSchedule(timePression);
                }
                else
                {
                    triggerBuilder.WithSimpleSchedule
                        (x => x.WithInterval(new TimeSpan(timelongPression))
                        .RepeatForever());
                }
                ITrigger trigger = triggerBuilder.Build();
                model = new QuartzModel(plugdic["JOBNAME"], job, trigger);
                if (!this.QuartzSchedule.CheckExists(model))
                {
                    this.QuartzSchedule.AddJob(model);
                }
            }
            return(null);
        }