Esempio n. 1
0
        public void NewTask(string fullClassName, SpiderSettings settings, SpiderCallback callback)
        {
            Type   tp     = assembly.GetType(fullClassName);
            Spider spider = (Spider)Activator.CreateInstance(tp);

            spider.NewTask(settings, callback);
        }
Esempio n. 2
0
        public void NewTask(SpiderSettings settings, SpiderCallback callback)
        {
            DateTime beforWorkDt = DateTime.Now;

            this.spiderCallback = callback;

            // 开始任务工作
            try
            {
                ImportSettings(settings); // 导入配置
                BeginWork();
            }
            catch (ThreadAbortException)
            {
                // 进程正在被中止
                // 不进行操作
            }
            catch (Exception e)
            {
                // 任务执行中抛出的错误被接住了...
                LogError(e.Message);
                Logging.Error(e.ToString()); // 保存错误详情
            }

            // 任务执行完毕
            DateTime afterWorkDt = DateTime.Now;
            double   timeSpent   = afterWorkDt.Subtract(beforWorkDt).TotalSeconds;

            Log("\n");
            Log($">> 任务执行完毕 (执行耗时:{timeSpent.ToString()}s)");
            RunJs($"Task.get('{settings.TaskId}').taskIsEnd();"); // 报告JS任务结束

            Utils.ReleaseMemory(true);
        }
Esempio n. 3
0
        /// <summary>
        /// 开始执行任务
        /// </summary>
        /// <param name="obj"></param>
        public void StartTask(object obj)
        {
            SpiderSettings settings = (SpiderSettings)obj;

            settings.CrBrowser = crBrowser;

            Spider spider = null;

            // 实例化 Spider 对象
            string typeName = $"{this.GetType().Namespace}.Spiders.{settings.ClassName}";

            try
            {
                spider = (Spider)Activator.CreateInstance(Type.GetType(typeName));
                spider.importSettings(settings); // 导入配置
            }
            catch
            {
                string errorText = "任务新建失败,无法实例化对象 " + typeName;
                Logging.Error(errorText);
                MessageBox.Show(errorText, "Nacollector 错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            // 开始任务工作
            DateTime beforWorkDt = DateTime.Now;

            try
            {
                spider.BeginWork();
            }
            catch (Exception e)
            {
                // 任务执行中抛出的错误被接住了...
                spider.LogError(e.Message);
                Logging.Error(e.ToString()); // 保存错误详情
#if DEBUG
                spider.Log(e.ToString());
#endif
            }

            // 任务执行完毕
            DateTime afterWorkDt = DateTime.Now;
            double   timeSpent   = afterWorkDt.Subtract(beforWorkDt).TotalSeconds;
            spider.Log("\n");
            spider.Log($"&gt;&gt; 任务执行完毕 (执行耗时:{timeSpent.ToString()}s)");

            // 报告JS任务结束
            crBrowser.RunJS($"Task.get('{settings.TaskId}').taskIsEnd();");

            Utils.ReleaseMemory(true);
        }
Esempio n. 4
0
        public void NewTaskThread(SpiderSettings settings)
        {
            // 创建任务执行线程
            var thread = new Thread(new ParameterizedThreadStart(StartTask))
            {
                IsBackground = true
            };

            thread.Start(settings);

            // 加入 Threads Dictionary
            taskThreads.Add(settings.TaskId, thread);
        }
Esempio n. 5
0
        // 创建新任务
        public void createTask(string taskId, string className, string classLabel, string parmsJsonStr)
        {
            // 配置
            var settings = new SpiderSettings
            {
                TaskId       = taskId,
                ClassName    = className,
                ClassLabel   = classLabel,
                ParmsJsonStr = parmsJsonStr
            };

            _form.taskRunner.NewTaskThread(settings);
        }
Esempio n. 6
0
        /// <summary>
        /// 1.设置配置
        /// </summary>
        /// <param name="spiderSettings"></param>
        public void importSettings(SpiderSettings spiderSettings)
        {
            this.spiderSettings = spiderSettings;
            TaskId = spiderSettings.TaskId;

            JArray ja = (JArray)JsonConvert.DeserializeObject(spiderSettings.ParmsJsonStr);

            foreach (JObject item in ja)
            {
                string parmName  = item["name"].ToString();
                string parmValue = item["value"].ToString();
                parms[parmName] = parmValue;
            }
        }
Esempio n. 7
0
            // 创建新任务
            public void createTask(string taskId, string className, string classLabel, string parmsJsonStr)
            {
                // 配置
                var settings = new SpiderSettings()
                {
                    TaskId       = taskId,
                    ClassName    = className,
                    ClassLabel   = classLabel,
                    ParmsJsonStr = parmsJsonStr
                };
                // 创建任务执行线程
                var thread = new Thread(new ParameterizedThreadStart(_mainForm.StartTask));

                thread.IsBackground = true;
                thread.Start(settings);
                // 加入 Threads Dictionary
                taskThreads.Add(taskId, thread);
            }
Esempio n. 8
0
        public void NewTask(SpiderSettings settings)
        {
            DateTime beforWorkDt = DateTime.Now;

            string typeName = $"{this.GetType().Namespace}.{settings.ClassName}";

            // 实例化 Spider 对象
            var spider = (Spider)Activator.CreateInstance(Type.GetType(typeName));

            spider.importSettings(settings);

            // 开始任务工作
            try
            {
                spider.BeginWork();
            }
            catch (ThreadAbortException)
            {
                // 进程正在被中止
                // 不进行操作
            }
            catch (Exception e)
            {
                // 任务执行中抛出的错误被接住了...
                spider.LogError(e.Message);
                Logging.Error(e.ToString()); // 保存错误详情
            }

            // 任务执行完毕
            DateTime afterWorkDt = DateTime.Now;
            double   timeSpent   = afterWorkDt.Subtract(beforWorkDt).TotalSeconds;

            spider.Log("\n");
            spider.Log($"&gt;&gt; 任务执行完毕 (执行耗时:{timeSpent.ToString()}s)");
            settings.BrowserJsRunFunc($"Task.get('{settings.TaskId}').taskIsEnd();"); // 报告JS任务结束

            Utils.ReleaseMemory(true);
        }
Esempio n. 9
0
        /// <summary>
        /// 1.设置配置
        /// </summary>
        /// <param name="spiderSettings"></param>
        public void ImportSettings(SpiderSettings spiderSettings)
        {
            this.spiderSettings = spiderSettings;
            TaskId = spiderSettings.TaskId;

            JArray ja = (JArray)JsonConvert.DeserializeObject(spiderSettings.ParmsJsonStr);

            foreach (JObject item in ja)
            {
                string parmName  = item["name"].ToString();
                string parmValue = item["value"].ToString();
                parms[parmName] = parmValue;

                // 将配置赋值到同名字段
                var fields = this.GetType().GetRuntimeFields().Where((t) => t.Name == parmName).ToArray();
                if (fields.Length > 0)
                {
                    var field = fields[0];
                    if (field.FieldType.Equals(typeof(int)))
                    {
                        int parmValueNnum;
                        if (int.TryParse(parmValue, out parmValueNnum))
                        {
                            field.SetValue(this, parmValueNnum);
                        }
                        else
                        {
                            throw new Exception("输入的数据无法转换为字段的 int 类型");
                        }
                    }
                    else
                    {
                        field.SetValue(this, parmValue);
                    }
                }
            }
        }